用现有TPT声明TPH(代码优先)

时间:2013-01-21 09:20:27

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

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

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

但我不知道如何指导EF使用TPH方法来完成这3-4个课程。我需要添加带有鉴别器的更正表吗?它会用到好吗?或者我需要通过流畅的API以某种方式指定它?

1 个答案:

答案 0 :(得分:1)

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

创建类层次结构

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

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

在DbContext的后续版本中,只添加一个DbSet:DbSet<Base> Data { get; set; }并将其用于CRUD操作。

就是这样!