如何包括"鉴别器"单个子类的列

时间:2015-06-25 22:35:55

标签: c# entity-framework entity-framework-6

我有一个有一个孩子的抽象基类。已成功为基类创建表,并使用子数据填充该表。

但是,没有鉴别器列。

如果我创建另一个子类并重新运行迁移,则EF会创建一个discriminator列。它还运行 Seed 方法并重新创建我的初始记录,因为它不再看到现有数据(因为现有记录的新鉴别器为空白)

我们将来会添加更多子课程。我想现在(在初学者中)使用鉴别器来防止在添加这些新类时出现数据问题。

在.NET 4.5上使用实体框架6(TPH)

1 个答案:

答案 0 :(得分:1)

您可以使用OnModelCreating覆盖中的fluent api指定鉴别器列的值(这将确保EF在您的方案中添加列):

modelBuilder.Entity<Child>()
   .Map<Child>(m => m.Requires("Discriminator").HasValue("Child"));

如果需要,您还可以更改Discriminator列的名称:

modelBuilder.Entity<Course>()  
    .Map<Course>(m => m.Requires("Type").HasValue("Course"))  
    .Map<OnsiteCourse>(m => m.Requires("Type").HasValue("OnsiteCourse"));

参考:

Mapping TPH inheritance

相关问题