如何包括“;鉴别器”;具有单个子类的列

本文关键字:单个 子类 何包括 鉴别 | 更新日期: 2023-09-27 17:59:52

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

但是,没有鉴别器列。

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

我们将来会增加更多的儿童班。我希望现在(在初学者中)有鉴别器,以防止在添加这些新类时出现数据问题。

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

如何包括“;鉴别器”;具有单个子类的列

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

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

如果需要,您也可以更改鉴别器列的名称:

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

参考:

映射TPH继承