我正在使用实体框架和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? 谢谢!
答案 0 :(得分:0)
您无法使用继承。继承有严格的规则。根据此规则,数据库中的每条记录都只能由继承层次结构中的一个实体类型表示。因此,您无法使用继承来控制可以检索给定记录的列数。
你需要投射。您可以尝试使用QueryView直接在EDMX中定义投影,也可以检查this blog post是否使用域服务投影。