EF6 FluentApi -我需要在FluentApi中设置默认值,以便映射使用子而不是父
本文关键字:FluentApi 映射 默认值 设置 EF6 | 更新日期: 2023-09-27 17:54:02
下面是部分设置。姓名简化:我有以下类:
- MyClass MySubclass1: MyClass
- MySubClass2: MyClass
MyClass
是另一个类(和表)的一部分,我将省略它。
我正在尝试做一个EF6查询(使用context.Set<MyClass>.Where(...)
)
我想返回子类而不是父类,我想避免使用Discriminator
。原因是:MyClass上有一个属性已经定义了它是MySubclass1
还是MySubclass2
。该属性称为KindId
,是查找表(Kinds
)的FK
。
ef部分按照如下方式自动生成:
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行开始的映射片段的问题:ColumnMyClass。KindId没有默认值,也不可为空。列值用于存储实体数据。
我尝试在DB上设置默认值,但我认为它需要在EF中设置默认值。问题是:我如何使用FluentApi做到这一点?
您可能会得到一个错误,因为它不知道为基类使用什么鉴别符值。所以,我认为你还需要一个基类的映射——例如:
Map<MyClass>(c => c.Requires("KindId").HasValue(0));