2012-03-02 10 views
0

Entity Framework 'gotcha'は、怠惰な読み込みが検証のためにオフになっています。したがって、db.Find()を使用してエンティティをロードし、それを更新し、db.SaveChanges()(DBContextオブジェクトである)を呼び出そうとすると、エンティティに関連エンティティが[必須]としてマークされていると、 。Entity Frameworkで必要な関連エンティティの検証

私はそれを見るようにこれを処理する3つの方法があります - エンティティをロードするとき 1. [必須]と関連するエンティティをマークし、手動でそれを作成 2.の時点で存在していることを確認されていない)(含めます関連するエンティティを含める 3.カスタム検証を実行します。

私は単純さのために(1)を使用する傾向にあります。

このシナリオでユーザーが採用する提案やパターンはありますか?

答えて

1

さらに2つのオプションがあります。

  • は関係が代わりに[Required]属性を使用しての流暢APIで必要とされていることを定義します。

    modelBuilder.Entity<Order>() 
        .HasRequired(o => o.Customer); 
    
  • は、あなたの中に非NULL可能外部キーを公開モデルの場合は、[Required]属性(およびFluent APIを使用しないマッピング)は必要ありません。表記規則では、関係が必要であることが検出されるため、

    public class Order 
    { 
        //... 
        public int CustomerId { get; set; } 
        public Customer Customer { get; set; } 
        //... 
    } 
    

正に、私はなぜそれが動作するのかわかりません。この場合、何らかの理由でEFの検証では、表現されたモデル、関係、およびデータベーススキーマはすべてのケースで同じですが、Fluent構成ではなく、データ注釈のみがチェックされます。

関連する問題