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