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

C# 扩展实体框架模型以包含新属性,c#,.net,entity-framework,C#,.net,Entity Framework,我是EF的新手,如果这是一个noob问题,请原谅 基本上,我们有一个EF模型,使用model First为我们的“平台”项目建立,并在我们在此平台上构建的许多应用程序中共享。在其中一些应用程序中,我们希望在不更改平台中的模型的情况下扩展类以包含其他属性。EF 4是否可以实现这一点?我如何在不修改.edmx文件的情况下实现这一点 我注意到生成的类都是分部的,因此我可以创建一个具有相同名称的新分部类来包含新属性,但是是否需要处理任何映射 p、 在正常情况下,我更倾向于使用继承并创建一个新类来保存新属

我是EF的新手,如果这是一个noob问题,请原谅

基本上,我们有一个EF模型,使用model First为我们的“平台”项目建立,并在我们在此平台上构建的许多应用程序中共享。在其中一些应用程序中,我们希望在不更改平台中的模型的情况下扩展类以包含其他属性。EF 4是否可以实现这一点?我如何在不修改.edmx文件的情况下实现这一点

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

p、 在正常情况下,我更倾向于使用继承并创建一个新类来保存新属性,但同样,我不知道如何使用EF实现这一点。。这里的任何启示都将不胜感激


非常感谢,

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

partial class MyEntity
{
    public string MyExtraProperty {get;set;}
}

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

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

使用分部类可以解决您的问题,但:


  • 必须在同一部件中定义分部类的所有零件
  • 部分零件中的属性不会持久化到数据库中
  • 部分零件中的特性不能用于linq到实体查询

我同意在部分实体类中添加额外属性(正如您和Kaido所说)

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


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

但我不能在单独的项目中创建分部类,有什么办法可以绕过它吗?您可以更改模板以从您自己的类派生,哪个类可以在另一个项目中,但是基类必须从EntityObject派生。扩展的目的是什么?如果您需要UI或类似的本地扩展(或者映射到viewmodel),则使用继承可能比较谨慎。如果您需要应用程序范围的扩展,那么为什么要使用单独的项目呢?谢谢,这几乎回答了我想知道的所有问题“必须在同一个程序集中定义”帮助了我。我真的很想根据实体所包含的域来扩展该实体。。无需使用automapper之类的工具跨层绑定。