2

LINQ-TO-SQLデータレイヤーにPLINQOを使用しています。

私は次のコードを持っています(実際のコードではなく、私が得ているエラーを再現するためだけです):

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 に答える