EF Code First - 如何在Table-Per-Hierarchy Mapping上防止创建表上的重复列

时间:2012-09-11 05:50:11

标签: c# entity-framework ef-code-first

我有下面的实体

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中不可能像上面这样做,这对我来说很奇怪..

2 个答案:

答案 0 :(得分:4)

将TemplateName移动到MyBaseClass中以避免此问题。

如有必要,您可以使用中间基类来保存仅由您的类的子集共享的属性。

答案 1 :(得分:0)

通过网络搜索后,到目前为止还无法做到这一点。因为我意识到我的继承树是错误的。

所以在我的情况下,我应该改变我的代码以匹配EF要求,这听起来很奇怪..因为在很多情况下ENTITY是NO NO改变,我们通常创建一个在多个项目中使用的实体。事件我们发现我们的实体错了,我们不会更新它,因为更新它将需要对其他项目进行大量更改。

到目前为止,我认为我的问题没有确切的答案。将在EF支持后立即更新。