linq to sql - C#/PLINQO - 分离同一实体并将其重新附加到同一上下文失败

本文关键字:新附加 失败 上下文 实体 PLINQO 分离 linq to sql | 更新日期: 2023-09-27 17:55:13

我正在使用PLINQO作为我的LINQ-TO-SQL数据层。

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

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

执行最后一行代码会导致 InvalidOperationException 出现以下错误消息:"无法附加已存在的实体"。

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

如何完全分离实体,以免出现错误?

谢谢科比

linq to sql - C#/PLINQO - 分离同一实体并将其重新附加到同一上下文失败

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

尝试将 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();