プロパティ「IdEventReport」を公開するインターフェイス「IEventReportElement」から継承する多くのタイプがあります。
public interface IEventReportElement
{
long Id { get; set; }
long? IdEventReport { get; set; }
}
これは、常にすぐに適切に入力できるとは限らないため、null 許容プロパティですが、データベースでは null 許容であってはなりません。
そのため、行を追加しました
modelBuilder.Types<IEventReportElement>().Configure(x=>x.Property(y=>y.IdEventReport).IsRequired());
DbContext の OnModelCreating メソッドに。
ただし、タイプ 'Position' はこのインターフェイスを実装する必要がありますが、データベースにプロパティ 'IdEventReport' の列を持つべきではなく、代わりにそれが公開するプロパティ 'IdParent' の列を持つ必要があります。
public class Position : BOBase, IEventReportElement
{
public long? IdEventReport
{
get { return IdParent; }
set { IdParent = value; }
}
public long? IdParent { get; set; }
}
および modelBuilder のセクション
modelBuilder.Entity<Position>().Property(x => x.IdParent).IsRequired();
modelBuilder.Entity<Position>().Ignore(x => x.IdEventReport);
ただし、データベースを作成しようとすると、すでに例外がスローされます。
System.InvalidOperationException: プロパティ 'IdEventReport' は、タイプ 'Position' で宣言されたプロパティではありません。Ignore メソッドまたは NotMappedAttribute データ注釈を使用して、プロパティがモデルから明示的に除外されていないことを確認します。有効なプリミティブ プロパティであることを確認してください。
これは有効かもしれませんが、特定のタイプの指定された Type 構成をオーバーライドすることはできませんか? このインターフェイスを実装する他のすべての型に行 .IsRequired() を追加する必要がありますか、またはこれを克服する別の方法はありますか?