通过Data Annotation创建实体框架TPH Discriminator列

时间:2016-03-19 17:39:05

标签: c# entity-framework data-annotations table-per-hierarchy

我想通过Data Annotation创建Discriminator列。

[Table("Book")]
public partial class Book
{
    public long BookID { get; set; }

    [StringLength(100)]
    public string name { get; set; }

    public int? page { get; set; }

}

按Fluent映射

modelBuilder.Entity<Book>()
            .Map<StoryBook>(m => m.Requires("typetitle").HasValue("story"));

无论如何,我需要在选择结果

中有鉴别器列值

1 个答案:

答案 0 :(得分:0)

  

我想通过Data Annotation创建Discriminator列。

您无法注释不存在的属性。

使用TPH继承,discriminator属性不是类模型的一部分。这是因为将其值设置为另一个类型的值会产生歧义:类型A,标记为类型B.因此,EF只会阻止开发人员这样做。

所以:映射TPH继承只能通过流畅的映射完成。

  

无论如何,我需要在选择结果

中有鉴别器列值

如果你需要代码中的鉴别器值,这通常是一个告诉你要么不应该以它应该的方式应用继承,要么你根本不应该使用继承。反对使用继承的一个指标是,在某些情况下,应该在运行时更改对象的“类型”(即,更改鉴别器的值)。