Entity framework EF 4.1中带有多个可为空的鉴别器的每个层次的表布局问题

Entity framework EF 4.1中带有多个可为空的鉴别器的每个层次的表布局问题,entity-framework,frameworks,entity,entity-framework-4.1,table-per-hierarchy,Entity Framework,Frameworks,Entity,Entity Framework 4.1,Table Per Hierarchy,我有一个带有int PK、一个notnull字段和两个NULL字符串字段的表 当我在EF中设置TPH样式设计时,我是这样设置的: 顶级类型只有PK和notnull字段 第一级检查第一个可为空的字段作为鉴别器。非空结果类型是抽象类型。我相应地绘制了这个领域的地图 对于第二个字段,我再次这样做,再次映射其中的NOTNULL。我在映射的字段上设置了nullable=false <EntitySetMapping Name="Items"> <EntityTypeMap

我有一个带有int PK、一个notnull字段和两个NULL字符串字段的表

当我在EF中设置TPH样式设计时,我是这样设置的:

顶级类型只有PK和notnull字段

第一级检查第一个可为空的字段作为鉴别器。非空结果类型是抽象类型。我相应地绘制了这个领域的地图

对于第二个字段,我再次这样做,再次映射其中的NOTNULL。我在映射的字段上设置了nullable=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>


Welp,我最终放弃了让鉴别器列通过继承进行传播的尝试,因此我创建了3个视图,一个顶级视图,一个用于null field1和notnull field,然后在notnull field上,我将field2作为EF中的鉴别器列。这听起来像是对我问题的蹩脚回答,所以我想听听知情人士的意见。布勒

更新:修正!在我在msdn上找到的一篇文章中偏离了水平分区的概念(http://msdn.microsoft.com/en-us/library/cc716779.aspx)我进入并在msl中手动添加了条件。看起来你不能让设计师自动完成这项工作。对于那些想知道的人,请在xml编辑器中打开edmx,然后向下查看映射的条件元素。在需要的地方添加额外的条件(显然条件不是从父实体继承的,所以您必须手动将它们添加到子实体)并编译