我正在使用PLINQO作为我的LINQ-TO-SQL数据层。
我有以下代码(不是真正的代码,只是为了重新产生我得到的错误):
var context = new MyDataContext();
var user = context.User.GetByKey("username");
user.Detach();
context.User.Attach(user);
使用InvalidOperationException执行最后一行代码结果,并显示以下错误消息:“无法附加已存在的实体。”
我认为Detach方法应该将实体与上下文分离,似乎它只是将实体中的链接移除到上下文,但上下文仍然“记住”实体。
如何完全分离实体以便我不会收到错误?
谢谢, Koby
答案 0 :(得分:1)
我得出结论,我的设计是不正确的,并没有考虑对linqtosql的限制,我对代码进行了更改,所以这样的情况不会发生,如果它会抛出异常。
答案 1 :(得分: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();