我有一个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()?
答案 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