4

ADO.NETチームのこのブログ投稿では、例として、EntityFrameworkCode-FirstのFluentAPIで階層ごとのテーブルマッピングを定義する方法を示しています。これは(少し簡略化された)例です:

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ここでは明らかに、モデルクラスに関連するプロパティを持たないデータベーステーブルの「純粋な」識別子列です。それは大丈夫で、私が欲しいものです。

このマッピング用のDBテーブルを作成すると、SQLServerの列Typeのタイプはになりますnvarchar(MAX)

Fluent APIでディスクリミネーター列のタイプを構成する方法はありますか?

たとえば、派生モデルクラスを区別するためのType可能な値を含む識別子列があります。"A", "B" or "C"SQL Serverの列のタイプを構成するにはどうすればよいvarchar(1)ですか?

(たとえば、設定して文字値を単純に使用しようとしました(一重引用符に注意してください)。ただし、これにより、型が識別子列として許可されていないことm => m.Requires("Type").HasValue('A')を示す例外がスローされます。)char

4

1 に答える 1

3

EF チームは、TPH の識別子列の型の変更が現在サポートされていないことをここで確認しています。これは、RTM の前に有効にできるかどうかを確認するために調査しているものです。

とはいえ、この記事では列の型を int に変更する方法を示しましたが、CTP5 の時点ですべての型でこれが完全にサポートされているわけではないことが確認されています。

于 2011-02-19T22:39:39.853 に答える