C#/plinko-将同一实体分离并重新附加到同一上下文失败

C#/plinko-将同一实体分离并重新附加到同一上下文失败,c#,linq-to-sql,plinqo,C#,Linq To Sql,Plinqo,我将PLINQO用于LINQ-TO-SQL数据层 我有以下代码(不是真正的代码,只是为了重新生成我得到的错误): 执行代码的最后一行将导致InvalidOperationException,并显示以下错误消息:“无法附加已存在的实体。” 我认为Detach方法应该将实体从上下文中分离出来,看起来它只是删除了实体到上下文的链接,但是上下文仍然“记住”实体 如何完全分离实体,以避免出现错误 谢谢, Koby我得出的结论是,我的设计不正确,没有考虑linqtosql的限制,我对代码进行了更改,这样就不

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

我有以下代码(不是真正的代码,只是为了重新生成我得到的错误):

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

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

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

谢谢,
Koby

我得出的结论是,我的设计不正确,没有考虑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();

您介意用您的更改更新此线程吗?这样,如果其他人遇到此问题,他们将看到他们需要进行的更正。上面的示例是我遇到的问题的抽象。我在“PLINQO和事务问题”标题下发布了另一个问答,描述了实际问题和我实现的解决方案。
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();