EF Code First Integer Discriminator Column

时间:2012-09-19 06:06:37

标签: entity-framework ef-code-first entity-framework-5

根据这个消息来源

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方法但是这样   方法已被定义为接受一种对象:

     

public void HasValue(object value);

     

因此,例如,如果我们将int类型的值传递给它,那么Code   首先,不仅要使用我们想要的值(即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),not null

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

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

1 个答案:

答案 0 :(得分: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(); })
    ;