0

エンティティ フレームワーク 4.0 プロジェクト。

現在、INSTEAD OF DELETE トリガーを使用してカスケード削除を行っています。

私のデータモデルコードでこれを行う方法はありますか?

部分クラスを介してデータ コンテキスト クラスを追加することを考えました。次に、ObjectStateManager.ObjectStateManagerChanged を使用して削除を監視し、最初に子を削除します。問題は、部分的にコンストラクターにフックして、イベントがフックされることを確認できないことです。コンテキストを作成してからイベントをフックするファクトリメソッドを作成できると思います...

次に、私のデリゲートでは、削除される要素のタイプを決定するために最小限のリフレクションを使用してから、その子を削除する必要があるため、少し不安定です。

何かが欠けているように感じます。たとえば、すべての Entity クラスにオーバーライド可能な OnDelete() メソッドが必要なため、すべての子を削除できます。

新しいバージョンの EF でこれが解決される場合は、お気軽に言及してください。ただし、このプロジェクトは v4 でロックされているため、答えにはなりません。

ありがとう。

4

1 に答える 1

2

OnContextCreatedイベントに接続するために使用できる部分メソッドがありSavingChangesます。新しいバージョンには、このタイプのサポートが組み込まれています。SaveChangesただし、 でメソッドをオーバーライドできますDbContext

public partial class MyContext
{
    partial void OnContextCreated()
    {
        SavingChanges += OnSavingChanges;
    }

    private void OnSavingChanges(object sender, EventArgs eventArgs)
    {
        var myEntities = ObjectStateManager.GetObjectStateEntries(EntityState.Deleted)
            .Where(e => e.Entity is MyEntity)
            .Select(e => e.Entity).Cast<MyEntity>();
    }
}
于 2012-07-18T03:43:08.190 に答える