0

我有如下实体

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

所以,我在这里发现,说在 EF 中不可能像上面那样做这样的事情,这对我来说很奇怪..

4

2 回答 2

4

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

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

于 2012-09-11T05:51:59.713 回答
0

在网上搜索后,到目前为止,这是不可能的。因为我意识到我的继承树是错误的。

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

到目前为止,我认为我的问题没有确切的答案。EF 支持后会尽快更新。

于 2012-10-03T07:01:28.630 回答