C# EF6 Fluent Api-我需要在FluentApi中设置默认值,以便映射要使用的子级而不是父级
这是设置的一部分。名称简化为: 我有以下课程:C# EF6 Fluent Api-我需要在FluentApi中设置默认值,以便映射要使用的子级而不是父级,c#,sql,entity-framework,default-value,ef-fluent-api,C#,Sql,Entity Framework,Default Value,Ef Fluent Api,这是设置的一部分。名称简化为: 我有以下课程: 我的班级 MySubclass1:MyClass MySubClass2:MyClass MyClass是另一个类(和表)的一部分,我将省略它 我正在尝试执行一个EF6查询(使用context.Set.Where(…)) 我希望返回子类而不是父类,并且我希望避免使用鉴别器。原因是:MyClass上有一个属性已经定义了它是MySubclass1还是MySubclass2。 该属性称为KindId,是查找表(Kinds)的FK EF零件正在自动生成
- 我的班级
- MySubclass1:MyClass
- MySubClass2:MyClass
MyClass
是另一个类(和表)的一部分,我将省略它
我正在尝试执行一个EF6查询(使用context.Set.Where(…)
)
我希望返回子类而不是父类,并且我希望避免使用鉴别器
。原因是: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();
}
public partial class MyClassMap
{
partial void Initialize()
{
Map<MySubclass1>(c => c.Requires("KindId").HasValue(1));
Map<MySubclass2>(c => c.Requires("KindId").HasValue(2));
}
}
公共部分类MyClassMap:EntityTypeConfiguration
{
公共MyClassMap()
{
ToTable(“MyClasses”、“MySchema”);
//…等(其他实现)
HasRequired(c=>c.Kind)
.WithMany(kind=>kind.myclass)
.HasForeignKey(c=>new{c.KindId});
初始化();
}
部分无效初始化();
}
这意味着,我只能更新Initialize()。
我的工作如下:
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();
}
public partial class MyClassMap
{
partial void Initialize()
{
Map<MySubclass1>(c => c.Requires("KindId").HasValue(1));
Map<MySubclass2>(c => c.Requires("KindId").HasValue(2));
}
}
公共部分类MyClassMap
{
部分无效初始化()
{
Map(c=>c.Requires(“KindId”).HasValue(1));
Map(c=>c.Requires(“KindId”).HasValue(2));
}
}
当我运行EF查询时,我得到以下异常:
错误3023:映射从x:行开始的片段时出现问题
MyClass.KindId没有默认值,不可为空。列值
是存储实体数据所必需的
我尝试在DB上设置默认值,但我认为需要在EF中设置默认值。
问题是:如何使用FluentApi实现这一点?您可能会遇到错误,因为它不知道基类使用什么鉴别器值。因此,我认为您还需要基类的映射——例如:
Map<MyClass>(c => c.Requires("KindId").HasValue(0));
Map(c=>c.Requires(“KindId”).HasValue(0));
谢谢您的回答。这是一个很好的建议。不幸的是,它将异常更改为以下内容:“MyClass类型已映射到表'MySchema.MyClasses'。在单个映射调用中指定表的所有映射方面。“我知道它已映射,只是不在当前映射中。”。有什么建议吗?啊,是的,Map
还需要包含c.ToTable(“MyClasses”,“MySchema”)
…但是如果你不能修改生成的配置……你是对的,很不幸生成了.ToTable:(@Recipe:你用什么生成代码?这是一个域建模工具(由框架人员定制编写)将(与T4模板一起)转换为c#