2

首先,這些問題是相似的,但絕對不一樣:EF:當抽象基數和一些具體類型在TPH表中,並且其他類型有自己的表時,我可以混合使用TPH和TPT嗎?

Can I mix Table per Hierarchy and Table per Type in Entity Framework? - 引用一個不同的場景。

Entity Framework: mix table per type and table per hierarchy - 另一種情況是,儘管接受第一種情況的答案與它無關(*)。 (*)其次,我在Entity Framework中成功地將table-per-type和table-per-hierarchy混合在一起,當使用table-per-entity映射基本實體並且使用table的鑑別器映射表時鏈級下降。


我試圖映射以下:

表:

BaseTable 
{ 
    int PK1; 
    int PK2; 
    string? Value1; 
    double? Value2; 
} 

ChildTable3 
{ 
    int PK1; 
    int PK2; 
    int Value; 
} 

實體:

abstract BaseEntity : class // Maps to BaseTable 
{ 
    int PK1; // Maps to PK1 in relevant table 
    int PK2; // Maps to PK2 in relevant table 
} 

Entity1 : BaseEntity // Maps to BaseTable when Value1 != null 
{ 
    string Value; // Maps to Value1 
} 

Entity2 : BaseEntity // Maps to BaseTable when Value1 == null && Value2 != null 
{ 
    double Value; // Maps to value2 
} 

Entity3 : BaseEntity // Maps to ChildTable3 
{ 
    int Value; // Maps to value 
} 

之前將ENTITY3映射工作。

添加ENTITY3及其映射之後,收到以下錯誤而編譯:

錯誤1個錯誤3026:問題在映射片段起始於線980,986,995:數據丟失或鍵約束違反是可能的表BaseTable。 一種用密鑰(PK)實體不會往返時: (PK是在 'BaseTables' 的EntitySet和實體是鍵入[MyNamespace.Entity3]) 路徑\至\ My.edmx 981 15 MyAssembly程序

  • 有沒有辦法讓這項工作?
  • 如果可以破解edmx來完成這項工作,我是否會放棄對數據庫每次更新的破解?

回答

5

我找到了一個工作流程,使通過設計師進行這樣的映射:

  1. 創建BaseEntity,ENTITY1,ENTITY2,ENTITY3
  2. 地圖BaseEntity到BaseTable抽象
  3. 地圖ENTITY1到BaseTable與條件
  4. 使用條件將實體2映射到基表
  5. 將實體3映射到ChildTable3
  6. 不映射 BaseEntity

要在以後添加更多的子表:

  1. 重映射BaseEntity
  2. 地圖新的子表
  3. 不映射BaseEntity
+1

感謝這個!如果可能的話,我寧願避免使用設計師;有沒有辦法在代碼中做到這一點? – 2014-03-27 16:21:59

+0

我最後一次嘗試使用EF 4.0的這種類型的映射(預先編碼)。 – 2014-03-29 13:33:07

相關問題