【发布时间】:2012-07-07 21:12:34
【问题描述】:
我有一个包含 Users 和 Uploads 表的数据库。重要的列是:Users -> UserIDUploads -> UploadID, UserID
关系中的主键是Users -> UserID,外键是Uploads -> UserID。
在LINQ to SQL,我做了如下操作:
Retrieve files
var upload = new Upload();
upload.UserID = user.UserID;
upload.UploadID = XXX;
db.Uploads.InsertOnSubmit(upload)
db.SubmitChanges();
如果我这样做并重新运行应用程序(当然,db 对象会重新构建)- 如果执行以下操作:
foreach(var upload in user.Uploads)
我使用该用户的 ID 获取所有上传。 (就像在前面的例子中添加的一样)
问题是,我的应用程序在添加上传和提交更改后不会更新user.Uploads 集合。即 - 我没有收到新添加的上传。
user 对象存储在Session 对象中。起初,我认为LINQ to SQL Framework 不会更新对象的引用,因此我应该简单地从新的SQL 请求中“重置”user 对象。我的意思是:
Session["user"] = db.Users.Where(u => u.UserID == user.UserID).SingleOrDefault();
(其中user 是以前的用户)
但这没有帮助。
请注意:重新运行应用程序后,user.Uploads 确实有新的上传!
有没有人遇到过这种类型的问题,或者这是正常行为?我是这个框架的新手。我很乐意接受任何建议。
谢谢!
P.S 我在另一种方法中有一个 DB.Uploads.Count() 行,它确实在添加上传后增加。
编辑:我尝试过的一些事情:
- 我的代码中的第一个方法(初始化)是
db = new new DBDataContext();。
在我的第一种方法中,我在db.SubmitChanges();之后添加了db.Dispose; db = new DBDataContext();,只是为了看看它是否有任何作用。没有。
- 作为快速修复,我做了
user.Uploads.Add(upload);。它确实将适当的对象添加到user.Uploads,然后在foreach循环中使用。嗯,呃。但我仍在等待有关此行为的一些解释。谢谢!
【问题讨论】:
-
尝试在 foreach 循环之后而不是内部添加
db.SubmitChanges() -
如果你还是要从数据库中检索用户,为什么还要使用 Session 对象呢?另外,
db.Users.SingleOrDefault(u => u.UserID = user.UserID) -
很抱歉 -
db.SubmitChanges()不在foreach循环中。循环不在那个方法中。调用SubmitChanges的方法是Upload,另一个方法有那个foreach 循环。罗伯特:怎么会?我需要检查一下。谢谢! -
罗贝特,你可能不明白我的意思。我不是每次都从数据库中检索用户。我刚刚执行了一次 -
Session["user"] = db.Where(...)- 它没有帮助 - 所以我删除了它。 -
您是否对所有代码使用相同的上下文?您应该只使用一个或关闭第一个然后打开第二个。
标签: c# asp.net sql-server linq-to-sql