2011-08-19 131 views
0

我正在使用实体框架和ria服务。我遇到了映射和继承问题。 我有一个拥有100列以上的(现有)表格,称之为tblFacility,然后将它拖入EF设计器中。我希望使用尽可能少的带宽,在大多数情况下,我只需要两列,一个ID和一个描述。因此,我添加了另一个实体Facility,并将其映射到tblFacility,并将两个列映射到其中,并将其设置为ID。然后,我将实体tblFacility的基类设置为Facility。EF继承/基类问题

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

设计师有两个字段(一个键/ 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> 

在这一点上我只需要客户端设备,也不需要tblFacility,但域服务不确实需要tblFacility类。我想用这个Facility基类作为IQueryable这是否有意义,或者我的方式与我应该如何使用EF基础? 谢谢!

回答

0

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

你需要投影。您可以尝试使用QueryView直接在EDMX中定义投影,或者您可以检查this blog post关于在域服务中使用投影。

+0

谢谢,这些都是可以接受的解决方案! – zBomb