2011-08-13 6 views
0

私は別のエンティティBのナビゲーションプロパティとして使用するエンティティAを持っています。エンティティAの挿入を制御したいと思います.AIを挿入するときはいつでも、他のチェックを行い、 。
しかし、タイプBのエンティティを挿入すると、必要な追加チェックや更新を行わずに、接続されたAエンティティが自動的に挿入されます。ナビゲーションプロパティの挿入を防止する

どうすればこの問題を解決できますか?

更新 私はthis answerを推奨として使用することに決めました。しかし、OnBeforeInsert()では、OnBeforeInsert()が呼び出されないコンテキストに新しいエンティティを追加する可能性があります。なぜなら、var changedEntities = ChangeTracker.Entries();という新しいentitiedがまだ存在しなかったからです。
どうすればこの問題を解決できますか?

+0

[この回答を確認](http://stackoverflow.com/questions/7041178/on-insert-update-logic-in-ef-code-first/7041363#7041363) – Eranga

+0

@Eranga:ありがとう、更新をご覧ください。 – Naor

答えて

1

EFの拡張ポイントはごくわずかです。そのため、カスタマイズすることが非常に難しい場合があります。

この回答は、その後、あなたのDbContextクラスでObjectStateManagerObjectStateManagerChangedイベントをサブスクライブ私previous answer

public abstract class Entity 
{ 
    public virtual void OnBeforeInsert(){} 
    public virtual void OnBeforeUpdate(){} 
} 

public class Category : Entity 
{ 

    public string Name { get; set; } 
    public string UrlName{ get; set; } 

    public override void OnBeforeInsert() 
    { 
     //ur logic 
    } 
} 

を拡張したものです。

​​

EF 4.0を使用している場合は、それに応じてカスタマイズする必要があります。

+0

ニースですが、OnObjectStateManagerChanged登録をすべて削除してから削除する必要はありませんか? – Naor

+0

@Naorはい。私はWebのシナリオを想定していました。 – Eranga

+0

なぜWebシナリオでOnObjectStateManagerChanged登録を削除する必要はありませんか? – Naor