2012-05-29 88 views
0

簡單的測試項目從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中發生了什麼?

回答

0

找到答案在這裏... Entity Framework 4.3 - TPH mapping and migration error

... 這是一個已知的問題,4.3和4.3.1。 (我們發現修復4.3.1太遲了。)

... 簡而言之,您曾經可以在4.1中的單個EntityConfiguration上進行鏈接地圖調用。和4.2

謝天謝地,建議的調用Map的另一種方式(即不是鏈接)修復了我所有的問題。