我有一个有一个孩子的抽象基类。已成功为基类创建表,并使用子数据填充该表。
但是,没有鉴别器列。
如果我创建另一个子类并重新运行迁移,则EF会创建一个discriminator列。它还运行 Seed 方法并重新创建我的初始记录,因为它不再看到现有数据(因为现有记录的新鉴别器为空白)
我们将来会添加更多子课程。我想现在(在初学者中)使用鉴别器来防止在添加这些新类时出现数据问题。
在.NET 4.5上使用实体框架6(TPH)
答案 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"));
参考: