1

これはCodeFirstのかなり奇妙な動作のようですが、

私はテーブルを手に入れました:

public string Name {get;set;}

[Required]
public virtual Table1 Table1 {get;set;}

[Required]
public virtual Table2 Table2 {get;set;}

[Required]
public virtual Table3 Table3 {get;set;}

今、次のようにデータベースから行を取得した場合:

var row = database.Include("Table1").First();

row.name = "New name";
row.Table1.name = "New name";

database.SaveChanges();

2 つのエラーがスローされます。

Table2 : The Table2 field is required.

Table3 : The Table3 field is required.

問題は、これらの 2 つのロードされていない未使用の参照を検証するのはなぜですか?

一部のエンティティは多くの参照を持つ可能性があるため、1 つのフィールドを更新するだけなので、エンティティ全体をロードしないことをお勧めします。

4

1 に答える 1

1

属性で何かをマークRequiredする場合、変更を保存するときに存在する必要があります。EFは保存中に常にエンティティ全体を検証し、ナビゲーションプロパティは通常のプロパティ=>null=例外と同じ方法で処理されます。検証は、設計上、遅延読み込みをトリガーしません。

オプションは次のとおりです。

  • Required属性 を使用しないのはどちらかです
    • ナビゲーションプロパティごとにnull不可の外部キープロパティを追加できます
    • データアノテーションの代わりにfluent-apiを使用できます
  • EF検証をオフにします
于 2012-08-08T13:08:29.117 に答える