この質問が「重複」としてマークされていることに注意してください: Linq の行が見つからないか変更されたという質問とは異なり、私の質問は、「行が見つからないか変更されました」というメッセージをトリガーする特定のシナリオに関するものであり、その解決策を探しています。
さらに、私のシナリオはそこで提案された「最小作業単位」プリンシパルを既に実装しているため、その質問への回答は私の質問には役に立ちません。
私の Web サービスでは、次のように、クライアント アプリケーションから入ってくる LINQ to SQL エンティティを DataContext にアタッチしようとしています。
public void Update(MyEntity myEntity)
{
using (var context = new MyDataContext())
{
context.Attach(myEntity, true);
context.SubmitChanges();
}
}
LINQ to SQL でこれを行うための前提条件は、MyEntity が DB テーブルの ROWVERSION 列にマップされたプロパティを持つことです。私の場合、このプロパティを RowVersion と呼びました。
クライアントから入ってくる MyEntity のインスタンスで RowVersion が null に設定されている場合、次のように呼び出しcontext.SubmitChanges()
ますSystem.Data.Linq.ChangeConflictException
。
行が見つからないか、変更されています。
クライアント アプリケーションが RowVersion の値を変更しているにもかかわらず、これが発生しないようにするにはどうすればよいですか?
私が気づいたことの 1 つは、コンテキストから「古い」エンティティを取得し、その RowVersion 値を新しいエンティティに割り当てると、例外が回避されることです。これは正しいことですか?なんで?