Julia Lerman の EF Code First ブックの例に基づいた単純なテスト プロジェクト。Map メソッドを使用したときに TPH、TPT、または TPC が機能する例は 1 つもありませんが、なくても問題ありません。EF の他のすべての側面 (一部開発されたアプリケーションがあります) は問題なく動作しているようです。私は VS 2010/.NET 4 をすべての最新の更新プログラムと共に使用しており、今日 VS のインストールを修復することさえしました。
次の TPH の例では、InvalidOperationException - 「Map がタイプ 'Child' に対して複数回呼び出されましたが、少なくとも 1 つの呼び出しでターゲット テーブル名が指定されていませんでした。」がスローされます。
using System.Linq;
using System.Data.Entity;
namespace ConsoleApplication1
{
public class Program
{
static void Main(string[] args)
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());
var children = new Context().Set<Child>().ToList();
}
}
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Child : Parent
{
}
public class Context : DbContext
{
DbSet<Parent> Parents { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Parent>()
.Map(m =>
{
m.Requires("EntityType").HasValue("Parent");
m.ToTable("Families");
})
.Map<Child>(m => m.Requires("EntityType").HasValue("Child"));
}
}
}
今回の TPT の別の例では、「タイプ 'Child' は既にテーブル 'Children' にマップされています。1 つの Map 呼び出しで、テーブルのすべてのマッピング アスペクトを指定してください。」というメッセージがスローされます。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Parent>()
.Map(m => m.ToTable("Families"))
.Map<Child>(m => m.ToTable("Children"));
}
最後の例である TPC は、同様のメッセージをスローします。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Parent>()
.Map(m => m.ToTable("Families"))
.Map<Child>(m =>
{
m.ToTable("Children");
m.MapInheritedProperties();
});
}
他の例も何度も試しましたが、同様の結果が得られました。非常に基本的なものが欠けているか、インストール/構成に問題があると思われます。私のPCにはVS2008もインストールされており、数か月前に4つの異なるバージョンがインストールされていたため、SQL Serverの再構成を何度も行いました。現在、2008 R2 Express を使用しています。
誰かが似たようなものを見たことがありますか、またはEFで何が起こっているのかを追跡/デバッグする方法を知っていますか?