LINQ to SQL:除非调用SubmitChanges,否则不会反映DataContext更改

时间:2012-01-26 22:22:50

标签: .net linq linq-to-sql

我有一个User类和相关的UserRequest,所以VS设计师为我创建了User.UserRequests。

有时我执行一项任务来删除非活动的UserRequests,如下所示:

Dim requests = From req In db.UserRequests Where req.LastActivity < DateTime.Now.Subtract(New TimeSpan(0, 0, KeepRequestInterval)) Select req 


For Each req In requests 

    db.UserRequests.DeleteOnSubmit(req )
Next

当我访问User.UserRequests时,删除的请求仍然存在,除非我在删除它们之后调用db.SubmitChanges(),然后才能访问User.UserRequests。

有没有办法强制从User.UserRequests中删除已删除的请求而无需另外调用SubmitChanges()?

2 个答案:

答案 0 :(得分:3)

不,这是设计的。 http://msdn.microsoft.com/en-us/library/bb399378.aspx

  

无论您对对象进行了多少更改,都会发生更改   只针对内存中的副本。你没有改变   数据库中的实际数据。您的更改不会传输到   服务器,直到您在DataContext上显式调用SubmitChanges。

只有在提交更改后才会删除您的删除。

答案 1 :(得分:1)

您可以根据db.GetChangeSet()的结果检查User.UserRequests中的每个条目。 GetChangeSet返回自上次提交以来已更改的3个集合(删除,插入,更新)。

ChangeSet cs = db.GetChangeSet();

更多信息:

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.getchangeset.aspx