簡單的測試項目從Julia Lerman的EF Code First書中的示例中工作。沒有一個例子在使用Map方法時運行TPH,TPT或TPC,但沒有。 EF的每一個其他方面(我有一個開發應用程序的一部分)似乎工作正常。我正在使用VS 2010/.NET 4及所有最新的更新,我甚至還要求今天修復VS安裝。映射EF 4.3.1代碼中的繼承層次結構始終使用映射方法失敗
以下TPH示例將引發InvalidOperationException - 「對於類型'Child'多次調用Map並且至少有一個調用未指定目標表名稱。」
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這個時候,拋出「之類‘兒童’已經被映射到表‘兒童’指定在一個單一的地圖調用表的所有映射方面。」
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();
});
}
我試過任何數量的其他例子,也有類似的結果。要麼我錯過了一些非常基本的東西,或者我懷疑我有安裝/配置問題。我的電腦也安裝了VS2008,幾個月前我做了很多重新配置SQL Server,因爲我安裝了4個不同的版本。我現在正在使用2008 R2 Express。
有人看過類似或有任何想法如何跟蹤/調試EF中發生了什麼?