我有下面的实体
public abstract class MyBaseClass
{
public int Id { get; set; }
}
public class MyConcrete : MyBaseClass
{
public int TemplateName { get; set; }
public int Total { get; set; }
}
public class MyOtherConcrete : MyBaseClass
{
public int TemplateName { get; set; }
public int MyProperty { get; set; }
public string OtherProperty { get; set; }
}
使用默认初始化,EF将生成包含如下列的列的表:
Id
TemplateName
TemplateName1 // <-- this is the problem
Total
MyPorperty
MyOtherProperty
现在我的问题是如何配置EF,以便派生类上的所有TemplateName属性自动映射到TemplateName列而不创建另一列。是否可以在OnModelCreating
方法上配置它?
修改
实际上面是我的问题的简化版本。我有10个实体,一些属性可能在任何地方都重复,我不想添加任何抽象层。
我尝试手动映射OnModelCreating
上的列但是“某个类型中的每个属性名称必须是唯一的。属性名称'TemplateName'已经定义”例外是什么意思?
编辑2
所以,我发现here,说在EF中不可能像上面这样做,这对我来说很奇怪..
答案 0 :(得分:4)
将TemplateName移动到MyBaseClass中以避免此问题。
如有必要,您可以使用中间基类来保存仅由您的类的子集共享的属性。
答案 1 :(得分:0)
通过网络搜索后,到目前为止还无法做到这一点。因为我意识到我的继承树是错误的。
所以在我的情况下,我应该改变我的代码以匹配EF要求,这听起来很奇怪..因为在很多情况下ENTITY是NO NO改变,我们通常创建一个在多个项目中使用的实体。事件我们发现我们的实体错了,我们不会更新它,因为更新它将需要对其他项目进行大量更改。
到目前为止,我认为我的问题没有确切的答案。将在EF支持后立即更新。