2011-08-19 9 views
0

저는 엔터티 프레임 워크와 ria 서비스를 사용하고 있습니다. 매핑과 상속에 문제가 있습니다. 나는 100 개 이상의 열이있는 (기존의) 테이블을 가지고 있으며 이것을 tblFacility라고 부르며 EF 디자이너로 가져 왔습니다. 나는 가능한 한 적은 대역폭을 사용하기를 원하며 대부분의 경우 두 열만 필요합니다 (ID와 설명). 그래서 다른 엔티티 인 Facility를 추가하고이를 tblFacility에 매핑하고 두 개의 열을 매핑하여 키 ID를 설정했습니다. 그런 다음 엔티티 tblFacility의 기본 클래스를 Facility로 설정합니다.EF 상속/기본 클래스 질문

오류가 있습니다. 오류 3032 : 조각 시작 줄을 매핑하는 중 .... .... 엔티티 형식 dbModel.tblFaclity, dbModel.Facility가 테이블 tblMembers의 동일한 행에 매핑됩니다. 매핑 조건은 이러한 형식이 매핑되는 행을 구별하는 데 사용할 수 있습니다.

디자이너에는 두 개의 필드 (하나의 키/ID, 설명 하나)가있는 Facility가 있으며 방금 설명한 두 개의 열이 tblFacility에 없습니다. 난 내 클라이언트는 시설을 필요로하고 tblFacility를 필요로하지 않는이 시점에서 오류

<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> 

을 얻고 곳 edmx 파일은 다음과 같다 있지만 도메인 서비스는 tblFacility 클래스를 필요로하지 않습니다. 이 Facility 기본 클래스를 IQueryable로 사용하고 싶었습니다. 이것은 의미가 있습니까? 아니면 EF를 사용해야하는 기반을 벗어 났습니까? 감사합니다.

답변

0

상속을 사용할 수 없습니다. 상속에는 엄격한 규칙이 있습니다. 이 규칙에 따르면 데이터베이스의 각 레코드는 상속 계층 구조에서 하나의 엔터티 유형으로 만 표현 될 수 있다고합니다. 따라서 상속을 사용하여 주어진 레코드의 열 수를 제어 할 수는 없습니다.

투영해야합니다. QueryView을 사용하여 EDMX에서 직접 투영을 정의하거나 도메인 서비스에서 투영을 사용하는 방법에 대해 this blog post을 확인할 수 있습니다.

+0

감사합니다. 두 가지 모두 해결책입니다. – zBomb