扩展实体框架模型以包含新属性

时间:2011-05-23 15:36:08

标签: c# .net entity-framework

我是EF的新手,所以如果这是一个菜鸟问题,请原谅。

基本上,我们使用Model First为我们的“平台”项目设置EF模型,并在我们构建在此平台之上的许多应用程序中共享。在其中一些应用程序中,我们希望扩展类以包含其他属性,而无需更改平台中的模型。这是可能的EF 4,如何在不修改.edmx文件的情况下完成它?

我注意到生成的类都是部分的,所以我可以创建一个具有相同名称的新的部分类来包含新属性,但是有没有需要处理的映射?

P.S。在正常情况下,我更倾向于使用继承并创建一个新类来保存新属性,但是我再也不知道如何使用EF ...这里的任何启示都将非常感激!

非常感谢,

3 个答案:

答案 0 :(得分:22)

您不能使用继承,因为一旦从数据源加载实体,EF就不会知道继承,因此它会在没有属性的情况下实例化基类型而不是带有属性的派生类型。如果EF必须使用它,则必须在EDMX中映射任何继承。

使用partial class可以解决您的问题,但是:

  • 必须在同一个程序集中定义分部类的所有部分
  • 部分零件的属性不会保留到数据库
  • 部分内容的属性不能用于linq-to-entities查询

答案 1 :(得分:7)

EF生成部分类。因此,要扩展MyEntity,请使用

创建一个MyEntity.cs文件
partial class MyEntity
{
    public string MyExtraProperty {get;set;}
}

编辑:在与生成的实体相同的命名空间中

答案 2 :(得分:1)

我同意为您的实体的部分类添加其他属性(正如您和Kaido所说)。

通过这种方式,您可以自由添加所需的属性,而无需修改生成的类,如果再次生成模型(或从DB更新),则不会修改部分类。

在我看来,将属性添加到生成实体的部分类是可行的方法。