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 識別子列を整数にすることができるはずです。

また、discriminator 列のデータ型を変更するのも興味深いものです。上記のコードでは、文字列を HasValue メソッドに渡しましたが、このメソッドはオブジェクトの型を受け入れるように定義されています。

public void 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)、null 以外

実際に整数識別子列を指定することは可能ですか? もしそうなら、どのように?

マッピングを.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 に答える