我有许多从接口“IEventReportElement”继承的类型,它公开了属性“IdEventReport”:
public interface IEventReportElement
{
long Id { get; set; }
long? IdEventReport { get; set; }
}
这是一个可为空的属性,因为我并不总是能够立即正确填写它,但在数据库中不应为空。
这就是我添加该行的原因
modelBuilder.Types<IEventReportElement>().Configure(x=>x.Property(y=>y.IdEventReport).IsRequired());
到我在 DbContext 中的 OnModelCreating 方法。
但是,“位置”类型必须实现此接口,但不应在数据库中具有属性“IdEventReport”的列,而是它公开的属性“IdParent”的列。
public class Position : BOBase, IEventReportElement
{
public long? IdEventReport
{
get { return IdParent; }
set { IdParent = value; }
}
public long? IdParent { get; set; }
}
和模型构建器中的部分
modelBuilder.Entity<Position>().Property(x => x.IdParent).IsRequired();
modelBuilder.Entity<Position>().Ignore(x => x.IdEventReport);
但是,这在尝试创建数据库时已经引发了异常:
System.InvalidOperationException:属性“IdEventReport”不是“Position”类型的声明属性。使用 Ignore 方法或 NotMappedAttribute 数据注释验证该属性是否已从模型中显式排除。确保它是有效的原始属性。
尽管这可能是有效的,但是否无法覆盖特定类型的给定类型配置?我是否必须将 .IsRequired() 行添加到实现此接口的所有其他类型,或者是否有其他方法可以克服这个问题?