这是设置的一部分。名称简化: 我有以下课程:
MyClass
是另一个类(和表)的一部分,我将遗漏。
我正在尝试 EF6查询(使用context.Set<MyClass>.Where(...)
)
我想返回子类而不是父类,我想避免使用Discriminator
。原因是:MyClass上有一个属性,它已经定义了它是MySubclass1
还是MySubclass2
。
该属性名为KindId
,是查询表(FK
)的Kinds
。
EF-part正在自动生成如下:
public partial class MyClassMap : EntityTypeConfiguration<MyClass>
{
public MyClassMap ()
{
ToTable("MyClasses", "MySchema");
//...etc (other implementations)
HasRequired(c=> c.Kind)
.WithMany(kind => kind.MyClasses)
.HasForeignKey(c => new { c.KindId });
Initialize();
}
partial void Initialize();
}
这意味着,我只能更新Initialize()。 我这样做了:
public partial class MyClassMap
{
partial void Initialize()
{
Map<MySubclass1>(c => c.Requires("KindId").HasValue(1));
Map<MySubclass2>(c => c.Requires("KindId").HasValue(2));
}
}
当我运行EF查询时,我得到以下异常:
错误3023:从第x行开始映射片段时出现问题:列 MyClass.KindId没有默认值,也不可为空。列值 需要存储实体数据。
我尝试在数据库上设置默认值,但我认为它需要在EF中设置默认值。 问题是:我如何使用FluentApi执行此操作?
答案 0 :(得分:0)
您可能会收到错误,因为它不知道要为基类使用什么鉴别符值。所以,我认为你还需要一个基类的地图 - 例如:
Map<MyClass>(c => c.Requires("KindId").HasValue(0));