【问题标题】:LINQ to SQL: DataContext changes are not reflected unless SubmitChanges is calledLINQ to SQL:除非调用 SubmitChanges,否则不会反映 DataContext 更改
【发布时间】:2012-01-26 22:22:50
【问题描述】:

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

【问题讨论】:

    标签: .net linq linq-to-sql


    【解决方案1】:

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

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

    只有在提交更改后,您的删除内容才会被删除。

    【讨论】:

    • 我同意,实际更改数据库的唯一方法是通过 SubmitChanges()。在此之前,如果 SubmitChanges() 从未被调用,则事务位于未执行的队列中。
    • 手动从集合中删除它们怎么样?这是一个好习惯吗?
    • 呃,你想要达到的基本目标是什么
    【解决方案2】:

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

    ChangeSet cs = db.GetChangeSet();
    

    更多信息在这里:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      相关资源
      最近更新 更多