【发布时间】:2015-08-20 17:09:12
【问题描述】:
这是设置的一部分。名称被简化: 我有以下课程:
- 我的班级
- 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:Column 开始映射片段时出现问题 MyClass.KindId 没有默认值并且不能为空。列值 需要存储实体数据。
我尝试在数据库上设置默认值,但我认为它需要在 EF 中设置默认值。 问题是:如何使用 FluentApi 做到这一点?
【问题讨论】:
标签: c# sql entity-framework default-value ef-fluent-api