实体框架CTP5代码优先:如何在Table-Per-Hierarchy Mapping中指定discriminimimator列的类型?

时间:2011-02-19 20:33:43

标签: .net entity-framework code-first entity-framework-ctp5

ADO.NET团队的

This blog post在一个示例中显示了如何在Entity Framework Code-First的Fluent API中定义Table-Per-Hierarchy Mapping。这是(略微简化)的例子:

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    // more properties
}

public class DiscontinuedProduct : Product
{
    public DateTime DiscontinuedDate { get; set; }
}

...和TPH映射:

modelBuilder.Entity<Product>()
    .Map<Product>(m => m.Requires("Type").HasValue("Current"))
    .Map<DiscontinuedProduct>(m => m.Requires("Type").HasValue("Old")); 

Type显然是数据库表中的“纯”鉴别器列,它在模型类中没有相关属性。那很好,我想要的。

如果我为此映射创建数据库表,则Type列在SQL Server中具有nvarchar(MAX)类型。

有没有办法在Fluent API中配置鉴别器列的类型?

例如:我有一个带有可能值Type的鉴别器列"A", "B" or "C",以区分我的派生模型类。如何配置SQL Server中的列具有类型varchar(1)

(我试图通过设置实例m => m.Requires("Type").HasValue('A')来简单地使用一个字符值(注意单引号)。但是这会抛出一个异常,告诉我不允许char类型作为鉴别器列。)

1 个答案:

答案 0 :(得分:3)

目前不支持在TPH中更改鉴别器列类型的EF团队confirms here。他们正在研究这个问题,看看他们是否可以在RTM之前启用它。

也就是说,我展示了如何在this article中将列类型更改为int,但是他们确认这对于CTP5的所有类型都不完全支持。