2

問題:私のモデルでは、ORMイベントが発生する前にコールバックを使用してdbエンティティオブジェクトを処理する必要があります。また、私はnamed-scopeを適用する方法を探しているので、すべてのクエリに対して特定の条件を指定する必要はありません。インスタンスの場合。アイテムのdbcontextオブジェクトで検索を使用するときは、各呼び出しでactive = trueと記述する必要はありません。EntityFrameworkのバージョンのActiverecordコールバックとNamedScope

質問:

  1. は、ASP.NET MVC(EntityFramework)でcallbacks methods of ActiveRecordに匹敵するものはありますか?このような:after_save、before_save、after_create、before_create、after_validation、before_validationなど

  2. 必須条件で各クエリを追加するには、「モデルビュー」を作成する必要がありますか?サンプルまたはリソース/チュートリアルを提供してください。

答えて

6

いいえこのようなイベント/コールバックはありません。 EF ObjectContextは、ObjectMaterializedSavingChangesのイベントしか提供していません。最初は、エンティティがデータベースからマテリアライズ(ロード)されたときに反応し、変更を保存する前に何かを処理するために使用できます(SaveChangesメソッドをオーバーライドするのと同様です)。

例:

public void SavingChanges(object sender, EventArgs e) 
{ 
    ObjectContext context = (ObjectContext)sender; 

    var entities = context.ObjectStateManager 
          .GetObjectStateEntries(EntityState.Added) 
          .Where(e => !e.IsRelationship) 
          .Select(e => e.Entity) 
          .OfType<MyEntity>(); 

    // Now you have all entities of type MyEntity which will be added 
    // You can use similar approach for other type of entities or 
    // modified entities or deleted entities      
} 

EFは、世界的な条件/名前付きスコープのいずれかの種類を提供していません。クエリにすべての条件が含まれていることを常に確認する必要があります。たとえば、カスタム拡張メソッドを作成することができますし、デフォルトの代わりに、すべての追加条件を追加すること拡張メソッドを使用して下さい

例:

public static MyEntity FindWithCondition(this IQueryable<MyEntity> query, int id) 
{ 
    return query.Where(...).FirstOrDefault(e => e.Id == id); 
} 
関連する問題