0


この質問が「重複」としてマークされていることに注意してください: 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 値を新しいエンティティに割り当てると、例外が回避されることです。これは正しいことですか?なんで?

4

0 に答える 0