2

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

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

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

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

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

我怎样才能完全分离实体所以我不会得到错误?

谢谢,科比

4

2 回答 2

1

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

于 2011-05-06T16:02:34.137 回答
0

尝试将 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();
于 2011-05-11T09:35:55.423 回答