我们在我们的MVC应用程序中使用Entity Framework 6.1,使用code-first和table-per-hierarchy方法,因为我们是从零开始开发的,我们认为这种方法适合于快速开发。但是现在我有一个问题:假设我有一个基类和三个子类,它们如下所示:
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列: ID、Name、Number、Volume1、Number和判别器。卷列将仅用于SubClassOne,Volume1将用于SubClassTwo,Number仅用于SubClassThree。
我不太关心数据库行空间的“浪费”。但是,有一件事困扰着我:如果我是一个新开发人员,并且现在直接查看数据库,那么“册”和"Volume1“的名字就会让我感到困惑。我知道在代码端有SubClassOne和SubClassTwo,它们都有一个名为“音量”的属性。但我永远不知道哪一列是哪个班的。因此,我的问题是,是否有任何方法指示实体框架(例如使用属性)将SubClassOne.Volume和SubClassTwo.Volume映射到数据库中的Volume列。(另一个好处是我减少了一列,但这不是我的主要目标)。
我想,如果我不使用实体框架,代码优先,或每个层次结构表,并设计表,特别是DAL本人,我可以完全控制和实现这一点。但是现在呢?
发布于 2015-11-19 10:15:12
您可以对两个类使用属性列(“Volume1”)和列(“Volume2”),这样它就可以映射到相关的数据库列,并且具有相同的属性名“Volume2”。
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,任何疑问,然后告诉我。
https://stackoverflow.com/questions/33798441
复制相似问题