EF继承/基类问题

时间:2011-08-19 15:07:11

标签: entity-framework orm mapping

我正在使用实体框架和ria服务。我遇到了映射和继承问题。 我有一个(现有的)100多列的表,称之为tblFacility,我把它拉进EF设计师。我想尽可能少地使用带宽,在大多数情况下我只需要两个列,一个ID和一个描述。所以我添加了另一个实体Facility并将其映射到tblFacility并映射了两列,并将密钥设置为ID。然后我将实体tblFacility的基类设置为Facility。

我的错误是错误3032:映射片段起始行的问题....实体类型dbModel.tblFaclity,dbModel.Facility正被映射到表tblMembers中的相同行。映射条件可用于区分这些类型映射到的行。

设计人员拥有两个字段的Facility(一个键/ ID,一个描述),而tblFacility缺少我刚刚提到的两个列,看起来是正确的。 edmx文件看起来像这样我得到错误

<EntitySetMapping Name="Facilities">
        <EntityTypeMapping TypeName="IsTypeOf(dbModel.Facility)">
          <MappingFragment StoreEntitySet="tblFacility">
            <ScalarProperty Name="Number" ColumnName="intFaclNbr" />
            <ScalarProperty Name="Name" ColumnName="vcFaclName" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs" TypeName="HSCAMasterModel.tblMember">
          <MappingFragment StoreEntitySet=" tblFacility">
            <ScalarProperty Name="Number" ColumnName="intFaclNbr" />                  <ScalarProperty Name="vcAddr1" ColumnName="vcAddr1" />
            <!--...over 100 more columns, name is not one of them...-->
       </MappingFragment>
        </EntityTypeMapping>
      </EntitySetMapping>

此时我的客户端只需要Facility并且不需要tblFacility,但域服务确实需要tblFacility类。我想使用这个Facility基类作为一个IQueryable这是否有任何意义,或者我是否会偏离我应该如何使用EF? 谢谢!

1 个答案:

答案 0 :(得分:0)

您无法使用继承。继承有严格的规则。根据此规则,数据库中的每条记录都只能由继承层次结构中的一个实体类型表示。因此,您无法使用继承来控制可以检索给定记录的列数。

你需要投射。您可以尝试使用QueryView直接在EDMX中定义投影,也可以检查this blog post是否使用域服务投影。