私はエンティティフレームワーク4.1を使用しています。エンティティフレームワークとの並行性を処理する最良の方法は何ですか。エンティティフレームワークでそれを処理するinbuilt機能はありますか? 行バージョンを維持するためにテーブルに余分な列を追加せずに行うことはできますか?エンティティフレームワークとの並行性を処理する最良の方法
13
A
答えて
6
あなたは、このチュートリアルを見たことがあります。
26
RowVersionという名前のテーブルに列を設定し、この列をすべてのUPDATEステートメントとDELETEステートメントのwhere句に含めることをEntity Frameworkに指示できます。次に、変更されたすべてのエンティティについてこのフィールドを増やすことを確認します。私はこのようにそれをやった: http://www.asp.net/entity-framework/tutorials/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application
あなたはrowversion列なしでそれを行うことができますが、それは多くの場合、多くの状態を保存する必要があり、性能に悪影響を与えることができます。
//make all entities that need concurrency implement this and have RowVersion field in database
public interface IConcurrencyEnabled
{
int RowVersion { get; set; }
}
public class MyDbContext : DbContext
{
public override int SaveChanges()
{
foreach(var dbEntityEntry in ChangeTracker.Entries().Where(x => x.State == EntityState.Added || x.State == EntityState.Modified))
{
IConcurrencyEnabled entity = dbEntityEntry.Entity as IConcurrencyEnabled;
if (entity != null)
{
entity.RowVersion = entity.RowVersion + 1;
}
}
return base.SaveChanges();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//do all your custom model definition but have the following also:
modelBuilder.Entity<myEntity>().Property(x => x.RowVersion).IsConcurrencyToken();
}
}
関連する問題
- 1. エラー処理を行う最良の方法
- 2. データの並行処理方法は?
- 3. Scalaのループスタイルのプログラムを処理する最良の方法
- 4. node.jsの行ごとの並行処理制限方法
- 5. Symfony2の大きなフォームコレクションを処理する最良の方法
- 6. PDOクエリの例外を処理する最良の方法
- 7. 'this'の変更を処理する最良の方法
- 8. 多くの受信パケットを処理する最良の方法
- 9. フラスコのPOSTユニットテストを処理する最良の方法
- 10. Braintreeのタイムアウトを処理する最良の方法
- 11. テーブルの更新を処理する最良の方法
- 12. テキストボックスの時間検証を処理する最良の方法
- 13. .Netの電子メールリストを処理する最良の方法
- 14. Djangoの要求変数を処理する最良の方法
- 15. JavaのSetを反復処理する最良の方法
- 16. マルチスレッディングの最良の方法は、ファイル数の行を処理する
- 17. django querysetのメソッドと並行処理を処理するには?
- 18. Zend Frameworkでレコードフォームを処理する最良の方法
- 19. api.aiの範囲を処理する最も良い方法は?
- 20. 同期呼び出しを処理する最良の方法
- 21. Cでバルクメールを処理する最良の方法
- 22. 条件文を処理する最良の方法
- 23. レールアプリでダイナミックCSSを処理する最良の方法
- 24. twitterをソートして処理する最良の方法 - Twitter API
- 25. ZeroDivisonErrorを処理する最良の方法は?
- 26. バッファアンダーランを処理する最良の方法は?
- 27. リアルタイムクロックを処理する最良の方法は?
- 28. アンドロイドでランタイムアクセス許可を処理する最良の方法
- 29. AsyncControllerでタイムアウトを処理する最良の方法
- 30. ドキュメントアプリケーションで多言語を処理する最良の方法
私はこの質問を読んでいます。それは別の考えがありますありがとうhttp://stackoverflow.com/questions/3412690/entity-framework-objectcontext-concurrency –
私は行のバージョンの列なしで行うことはできません? –
あなたは 'IsConcurrencyToken()'で複数のプロパティを設定することができ、EFはupdateとdelete文のwhere節にこれらの列を追加します。私はこれをテストしていない。 –