public virtual DbSet<DBVolumetricObject> Volumetrics { get; set; } //this make error
我有以下模型
public abstract class DBVolumetricObject
{
public int Id { get; set; }
public int Design_Id { get; set; }
}
public class Material : DBVolumetricObject
{
public virtual MaterialDesign MaterialDesign { get; set; }
}
public class MaterialDesign : IDBDesign
{
...
public virtual List<Material> Materials { get; set; }
}
配置:
public class MaterialConfiguration : EntityTypeConfiguration<Material>
{
public MaterialConfiguration()
{
Map(m => m.MapInheritedProperties());
HasRequired<MaterialDesign>(x => x.MaterialDesign)
.WithMany(x => x.Materials)
.HasForeignKey(x => x.Design_Id);
}
}
当我尝试通过包管理器控制台中的update-database命令初始化数据库时,出现以下错误。
外键组件'Design_Id'不是声明的属性 输入'材料'。确认未明确排除 模型,它是一个有效的原始属性。
答案 0 :(得分:4)
我做了一些测试以验证我的评论并且它有效。
您的问题是您在基类中定义了FK - Design_Id,并在派生类中定义了此Design的导航属性。这样就可以错误地映射FK Design_Id,并允许它用作多个表的FK。为了防止出现这类问题,Entity Framework告诉您:将您的FK属性和Navigation属性放在同一个类中。否则,它将无法工作。
所以解决方案就是让你的类结构如下:
public abstract class DBVolumetricObject
{
public int Id { get; set; }
}
public class Material : DBVolumetricObject
{
public int Design_Id { get; set; }
public virtual MaterialDesign MaterialDesign{ get; set; }
}
public class MaterialDesign : IDBDesign
{
...
public virtual List<Material> Materials { get; set; }
}