【问题标题】:declare TPH with existing TPT (Code First)用现有的 TPT 声明 TPH(代码优先)
【发布时间】:2013-01-04 07:50:15
【问题描述】:

我有几个类继承了 1 个基本抽象类。它通过 fluent API 映射到现有数据库(使用 Table-Per-Concrete-Type,即未映射到任何表的基本抽象类)。

现在我想在我的代码中添加一些统计信息,对我来说最好的解决方案是对 3-4 个新类使用 TPH 方法。它可能继承也可能不继承与上述相同的类。

但我不知道如何指示 EF 对这 3-4 个类使用 TPH 方法。我是否需要添加带有鉴别器的正确表并且可以使用它?或者我需要通过 fluent API 以某种方式指定它?

【问题讨论】:

    标签: entity-framework ef-code-first tph


    【解决方案1】:

    我找到了。您不需要以某种方式指定要使用 TPH 的 EF。足够做以下事情:

    创建类层次结构

    class Base { ... }
    class Derived1 : Base { ... }
    class Derived2 : Base { ... }
    .......
    class DerivedN : Base { ... }
    

    使用公共列(Base 的内容)创建称为基本类型的表(否则不要忘记使用模型构建器对其进行映射),并且每个派生类型中的每个公共属性都有一列。 添加“鉴别器”列nvarchar(128),但我建议使用 varchar,除非您使用 unicode 类名称)。

    在 DbContext 的继承者中仅添加一个 DbSet:DbSet<Base> Data { get; set; } 并将其用于 CRUD 操作。

    就是这样!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      相关资源
      最近更新 更多