【问题标题】:Can a class inherit from Entity Framework class and still persist back to the DB using the inherited classes mappings?一个类可以从实体框架类继承并仍然使用继承的类映射保留回数据库吗?
【发布时间】:2011-04-26 21:43:38
【问题描述】:

一个类是否可以从实体框架类继承并仍然使用继承的类映射保留回数据库?当我尝试从“自我跟踪实体”类派生时收到错误消息,并且 SaveChanges 指出该类型没有任何映射。由于 Type 是从 Entity 类继承的,因此我希望它也可以以某种方式继承实体映射以使其正常工作。有没有人能让这个工作?

我试图支持的方案是在另一个程序集中扩展实体对象,该程序集引用包含实体和映射的程序集。部分类和映射被编译到包含实体对象的程序集中。所以我不能通过使用部分类来实现这一点。

【问题讨论】:

    标签: inheritance entity-framework-4 mapping self-tracking-entities


    【解决方案1】:

    不,EDMX(和自我跟踪实体)不可能。如果要存储派生类型,它也必须被映射。如果您需要向生成的代码添加任何内容,请使用您自己的实体类的部分部分。

    令人惊讶的是,代码优先(EFv4.1 和 DbContext API)似乎是可能的,但在这种情况下,您不能使用自我跟踪实体。我刚刚检查了数据库,但它是不可能的代码优先。它默默地创建 TPH 继承,并将派生类映射为另一个实体。

    【讨论】:

    • 这很糟糕。这意味着您必须提前了解所有派生类。那么就无法实现实体与EF的松耦合。
    【解决方案2】:

    除非您确实需要覆盖某些数据或默认功能,否则最好的办法是扩展类。由于 EF 类被声明为 partial,因此您可以创建另一个代码文件并将您的自定义方法或属性放入其中。然后,您将获得所有对象持久性以及您的自定义代码。

    public partial class MyEntity
    {
       //Extend the base object
       public string FormattedName
       {
          get
          {
             return String.Format("Lookie this! {0}/{1}", this.SomeString, this.SomeInt);
          }
       }
    }
    

    编辑 -- 为响应您的说明,如果您需要在另一个程序集中修改 EF 类,您最好的选择是创建一个以 Entity 类作为成员的包装类。然后,您将编写所有新功能来访问盒装实体的公共部分。它不会为您提供新属性的持久性,但无论如何您都没有得到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2011-06-25
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      相关资源
      最近更新 更多