【问题标题】:C#/PLINQO - Detach and re-attach the same entity to the same context failC#/PLINQO - 将同一实体分离并重新附加到同一上下文失败
【发布时间】:2011-05-05 19:44:00
【问题描述】:

我将 PLINQO 用于我的 LINQ-TO-SQL 数据层。

我有以下一段代码(不是真正的代码,只是为了重现我得到的错误):

var context = new MyDataContext();
var user = context.User.GetByKey("username");
user.Detach();
context.User.Attach(user);

执行最后一行代码导致 InvalidOperationException 并带有以下错误消息:“无法附加已存在的实体。”

我认为 Detach 方法应该将实体从上下文中分离出来,它似乎只是删除了从实体到上下文的链接,但上下文仍然“记住”实体。

我怎样才能完全分离实体,这样我就不会收到错误?

谢谢, 科比

【问题讨论】:

    标签: c# linq-to-sql plinqo


    【解决方案1】:

    我得出的结论是我的设计不正确并且没有考虑到对 linqtosql 的限制,我对代码进行了更改,因此不会发生这种情况,如果会抛出异常。

    【讨论】:

    • 您是否介意用您的更改更新此线程,这样如果其他人遇到此问题,他们将看到他们需要进行的更正。
    • 上面的例子是我遇到的问题的抽象。我在标题下发布了另一个问答:“PLINQO 和事务问题”,描述了实际问题和我实施的解决方案。
    【解决方案2】:

    尝试使用带有附加实体的 ObjectStateManager:

    var context = new MyDataContext();
    var user = context.User.GetByKey("username");
    // change field values
    ...
    user.AnyUserField = "123";
    ...
    context.AcceptAllChanges();
    context.ObjectStateManager.ChangeObjectState(user, EntityState.Added); // or use EntityState.Modified if it already exist anywhere
    context.SaveChanges();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多