首页 文章

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

提问于
浏览
4

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 显然是数据库表中的"pure" discriminator列,它在模型类中没有相关属性 . 那很好,我想要的 .

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

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

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

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

1 回答

  • 3

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

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

相关问题