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

相关问题