我有一个带有int pk的表,一个不是空字段和两个空字符串字段。

当我进入EF中设置TPH风格的设计时,我以这种方式进行设置:

顶级类型仅具有PK和非零字段。

第一级将第一个无效字段检查为鉴别器。非零结果类型是抽象的。我相应地绘制了字段。

我再次在第二个字段中进行此操作,再次映射在没有空的位置。我在映射的字段上设置了无效= false。

<EntitySetMapping Name="Items">
        <EntityTypeMapping TypeName="IsTypeOf(Model1.Item)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <ScalarProperty Name="OtherID" ColumnName="OtherID" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.BothNullItem)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <Condition ColumnName="FirstNullField" IsNull="true" />
            <Condition ColumnName="NullField2" IsNull="true" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.FirstFieldNull)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <ScalarProperty Name=FirstNullField" ColumnName="FirstNullField" />
            <Condition ColumnName="FirstNullField" IsNull="false" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.NotNullSubItem1)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <Condition ColumnName="NullField2" IsNull="true" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.NotNullSubItem2)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
             <ScalarProperty Name="NullField2" ColumnName="NullField2" />
             <Condition ColumnName="NullField2" IsNull="false" />
          </MappingFragment>
        </EntityTypeMapping>
</EntitySetMapping>

我得到的“两个带有不同键的实体被映射到同一行”。

我认为这是因为也许第一个项目不是无效的属性。

我创建了第三种类型来尝试照顾Nullfield1为null和Nullfield2不为空的情况(我的DB不会发生,我有一个约束),但是即使我添加了它也无效。

在两个子子中的任何一个中,明确添加非零条件都要求我映射列,即使我将其映射到某些外部属性,也无法正常工作。

“ bothnullitem”条件的组合也不正常。

有任何想法吗?

有帮助吗?

解决方案

Welp,我最终放弃了试图通过继承传播的歧视列,因此我创建了3个视图,一个顶级,一个用于null Field1而不是null Field 1,然后在NOT NOT NULL FIELD ONE上创建了field2,我将field2 iNIST2 EF中的列。这听起来像是我问题的一个糟糕的答案,所以我想听听某人知道这笔交易是什么。布勒?

更新:修复!在我在MSDN上发现的一篇文章(http://msdn.microsoft.com/en-us/library/cc716779.aspx)中,从水平分区概念中脱颖而出。看来您不能从设计师那里自动拥有这项工作。对于那些想知道的人,请在XML编辑中打开EDMX,然后下去看看映射的条件元素。在需要的情况下添加额外的条件(显然条件不会继承父母实体,因此您必须手动将其添加到孩子身上)并编译!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top