有什么方法可以指示 Entity Framework 在代码优先、table-per-hierarchy 方法中从列映射到模型 属性?

Any way to instruct Entity Framework to map from column to Model property in code-first, table-per-hierarchy approach?

我们在 MVC 应用程序中使用 Entity Framework 6.1,使用 code-firsttable-per-hierarchy 方法,因为我们是从头开始开发的,我们认为这种方式适合 table快速发展。但现在我有一个问题:假设我有一个基础 class 和三个子 class,它们看起来像这样:

public class BaseClass
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class SubClassOne : BaseClass
{
    public double Volume { get; set; }        
}

public class SubClassTwo : BaseClass
{
    public double Volume { get; set; }
}

public class SubClassThree : BaseClass
{
    public int Number { get; set; }
}

使用默认设置时,EF 将为数据库创建 6 列 table:ID、名称、卷、卷 1、编号和鉴别器。 Volume 列将仅用于 SubClassOne,Volume1 将用于 SubClassTwo,Number 仅用于 SubClassThree。

我不太关心数据库行空间的"waste"。但有一件事困扰着我:如果我是一名新开发人员并且现在直接查看数据库,"Volume" 和 "Volume1" 的名称会让我感到困惑。我知道在代码方面有 SubClassOne 和 SubClassTwo,它们都有一个名为 "Volume" 的 属性。但我永远无法知道哪一列是哪一列 class。所以我的问题是,有没有什么方法可以指示 Entity Framework(例如,使用属性)SubClassOne.VolumeSubClassTwo.Volume 都映射到数据库中的 Volume 列。 (另一个好处是我减少了一列,但这不是我的主要目标)。

我想如果我不使用 Entity Framework、代码优先或 table-per-hierarchy,并自己设计 tables,尤其是 DAL,我可以完全控制并实现这一点。但是现在呢?

您可以将属性 [Column("Volume1")] 和 [Column("Volume2")] 用于 Class,因此它可以映射到相关的数据库列并且您具有相同的属性 姓名 "Volume"。

public class BaseClass
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class SubClassOne : BaseClass
{
    [Column("Volume1")]   
    public double Volume { get; set; }        
}

public class SubClassTwo : BaseClass
{
    [Column("Volume2")] 
    public double Volume { get; set; }
}

public class SubClassThree : BaseClass
{
    public int Number { get; set; }
}

这有效fine.If有任何疑问请告诉我。