2012-03-28 85 views
3

我試圖重新映射我的TPH持久化對象層次的descriminator列在描述:錯誤重新映射EF代碼第一次TPH鑑別

http://msdn.microsoft.com/en-us/library/hh295845(v=vs.103).aspx

http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx

https://stackoverflow.com/a/6650064/141172

當我使用以下兩種變體之一進行映射:

modelBuilder.Entity<MyBase>() 
      .Map<MyBase>(m => m.Requires("TypeId").HasValue(0)) 
      .Map<DerivedA>(m => m.Requires("TypeId").HasValue(1)) 
      .Map<DerivedB>(m => m.Requires("TypeId").HasValue(2)) 
      .Map<DerivedC>(m => m.Requires("TypeId").HasValue(3)) 
      .Map<DerivedD>(m => m.Requires("TypeId").HasValue(4)); 

modelBuilder.Entity<MyBase>() 
      .Map<MyBase>(m => m.Requires("TypeId").HasValue(0)); 
modelBuilder.Entity<MyBase>() 
      .Map<DerivedA>(m => m.Requires("TypeId").HasValue(1)); 
modelBuilder.Entity<MyBase>() 
      .Map<DerivedB>(m => m.Requires("TypeId").HasValue(2)); 
modelBuilder.Entity<MyBase>() 
      .Map<DerivedC>(m => m.Requires("TypeId").HasValue(3)); 
modelBuilder.Entity<MyBase>() 
      .Map<DerivedD>(m => m.Requires("TypeId").HasValue(4)); 

具有以下變化:

  • 使用字符串,而不是整數,例如「1」 MyBase

  • 刪除地圖聲明我得到的錯誤:

    Map was called more than once for type 'DerivedA' and at least one of the calls didn't specify the target table name.

    所有派生類直接從MyBase繼承和所有派生類都包含在映射。

    我正在使用實體框架4.3.1。

    我在做什麼錯?

  • 回答

    7

    這固定在EF5-beta2鏈接的Map調用應該工作。

    在EF 4.3中,您需要將每個映射調用分解到EntityTypeConfiguration ,以獲取它適用的實體類型

    modelBuilder.Entity<MyBase>() 
         .Map<MyBase>(m => m.Requires("TypeId").HasValue(0)); 
    modelBuilder.Entity<DerivedA>() 
         .Map<DerivedA>(m => m.Requires("TypeId").HasValue(1)); 
    modelBuilder.Entity<DerivedB>() 
         .Map<DerivedB>(m => m.Requires("TypeId").HasValue(2)); 
    modelBuilder.Entity<DerivedC>() 
         .Map<DerivedC>(m => m.Requires("TypeId").HasValue(3)); 
    modelBuilder.Entity<DerivedD>() 
         .Map<DerivedD>(m => m.Requires("TypeId").HasValue(4)); 
    

    通知來電來Entity<DerivedA>Entity<DerivedB>,等等,而不是所有Entity<MyBase>

    +0

    良好的通話!感謝您的解決方法! – Scott 2012-04-05 19:06:48