3

根据这个消息来源

http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph。 aspx

应该可以让 TPH 鉴别器列是一个整数:

此外,更改鉴别器列的数据类型也很有趣。在上面的代码中,我们将字符串传递给 HasValue 方法,但该方法已定义为接受一种对象类型:

公共无效 HasValue(对象值);

因此,例如,如果我们将一个 int 类型的值传递给它,那么 Code First 不仅在鉴别器列中使用我们想要的值(即 1 和 2),而且还将列类型更改为 (INT, NOT NULL)

modelBuilder.Entity() .Map(m => m.Requires("BillingDetailType").HasValue(1)) .Map(m => m.Requires("BillingDetailType").HasValue(2));

但是,当我在代码中执行此操作时,我会看到诸如“1”和“2”之类的鉴别器值,但列类型仍然是

nvarchar(128),不为空

实际上可以指定一个整数鉴别器列吗?如果是这样,怎么做?

我确定我将映射指定为.HasValue(1)而不是.HasValue("1")

4

1 回答 1

2
modelBuilder.Entity<X>()
    .Map<X>(m => { m.Requires("BillingDetailType").HasValue(0).HasColumnType("tinyint"); })
    .Map<Y>(m => { m.Requires("BillingDetailType").HasValue(1); m.MapInheritedProperties(); })
    .Map<Z>(m => { m.Requires("BillingDetailType").HasValue(2); m.MapInheritedProperties(); })
    ;
于 2013-03-14T16:45:04.063 回答