有什么方法可以指示 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-first
和 table-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.Volume
和 SubClassTwo.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有任何疑问请告诉我。
我们在 MVC 应用程序中使用 Entity Framework 6.1
,使用 code-first
和 table-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.Volume
和 SubClassTwo.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有任何疑问请告诉我。