1

私のすべてのアプリケーションは、フィールド レベルのオプティミスティック コンカレンシーを使用しています。

これは、元のデータベース値を追跡し、元の値、更新された値、および現在のデータベース値の間で 3 方向の比較を実行して、(a) ユーザーが更新したものと (b) 他のユーザーが更新したものを決定することによって機能します。

私のアプリケーションでは、フィールドを行にグループ化し、複数のユーザーが同じ行の異なるグループを競合することなく更新できるようにします。

これは、異なる部門が同じレコードの異なるフィールドで作業することがよくあるためです。

EF4.1 は、行全体に基づく非常に基本的な同時実行モデルのみをサポートしているようです! つまり、何もない場合、ユーザーは無限の競合に遭遇します...

組み込みの動作をオーバーライドすることは可能ですか?

4

1 に答える 1

3

組み込みの動作をオーバーライドすることは可能ですか?

SaveChangesたとえば、オーバーライドで実装できるのは、アプリケーションロジックだけです。次の 3 つの値セットが必要です。

public override int SaveChanges() {
    foreach (var entry in ChangeTracker.Entries()
                                       .Where(e => e.State == EntityState.Modified) {
        // Original values:
        DbPropertyValues originalValues = entry.OriginalValues;
        // Current values:
        DbPropertyValues currentValues = entry.CurrentValues;
        // Database values:
        DbPropertyValues dbValues = entry.GetDatabaseValues();

        // Perform your logic here
    }

    return base.SaveChanges();
}
于 2012-09-11T08:07:15.623 に答える