0

次にマップファイルで定義した場合(ユニットとマシン間の1対多の関係):

this.HasRequired(t => t.Unit)
    .WithMany(t => t.Machines)
    .HasForeignKey(d => d.UnitId);

新しいエンティティMachine.UnitOfMeasurement=nullを追加すると、GetValidationErrorsを呼び出したときにDbContextが検証の問題を返さないのはなぜですか。また、それらを検出するために何ができますか。EFに更新を許可すると、外部キー参照エラーなどの意味のないメッセージがユーザーに返されますが、DbEntityValidationResult(検証エラーを発行したプロパティ名など)からユーザーに意味のある情報を抽出できます。

属性ではなく、検証ルールにIDataErrorInfoを使用しています。

4

1 に答える 1

1

EF検証では、ナビゲーションプロパティは検証されません。これは、関連エンティティが存在しないためではなく、遅延読み込みが有効になっていて関連エンティティが読み込まれていないために、ナビゲーションプロパティがnullになる可能性があるためです。また、ナビゲーションプロパティがnullの場合でも、対応する外部キープロパティを設定している可能性があります。これは、基本的にリレーションは存在するが、ナビゲーションプロパティはまだ更新されていないことを意味します。また、関連エンティティの読み込みを強制すると、検証によってデータベース全体がメモリに読み込まれることに注意してください(関連エンティティを読み込んだ後、新しく読み込まれたエンティティの関連エンティティを読み込むなどの結果が検証されます)-これは望ましくありません(EFは、これを防ぐために、検証中に遅延読み込みを実際にオフにします)。

于 2012-09-20T05:34:41.393 に答える