OK이 문제는 모두 해결되었습니다.엔터티 프레임 워크 자체 참조 계층 적 다수 대 다수
개념적으로 많은 하위 리소스와 많은 상위 리소스를 가질 수있는 리소스 엔터티가 있습니다. 자원 테이블에는 기본 키인 ID와 ID라는 두 개의 필드가 있습니다.
다 대다 관계를 완료하기 위해 Resource 테이블의 두 필드 (Parent_ID, Child_ID)와 각각 리소스 테이블 (ID)의 기본 키를 참조하는 두 개의 외래 키가 있고 ResourceHierarchy 테이블에는 (Parent_ID, Child_ID)의 복합 기본 키
이제 우리는 각 리소스가 다른 리소스에 대해 부모 또는 자식 역할을 할 수 있음을 이미 알고 있지만 논리적으로 모든 리소스가 부모를 가질 수는 없지만 그 점 외에도 있습니다. 예를 들어 내 리소스 테이블에 다음 리소스가 있다고 가정 해 보겠습니다.
ID Name
10000 Little House
10001 Font Door
10002 Roof
10003 Roof Tile
10004 Tile Monster
그리고 ResourceHierarchy 테이블에는 다음과 같은 관계가 있습니다.
Parent_ID Child_ID
10000 10001
10000 10002
10002 10003
10004 10003
그리고 엔티티 프레임 워크는 지금까지 너무 좋아 엔티티를 ... 생성 당신이 ResourceHierarchy 테이블의 관계로 취급되고 있음을 볼 것 edmx 파일에 생성 된 코드를 확인한다면
엔티티로 취급되지 않기 때문에 코드를 통해 ResourceHierarchy 테이블에 액세스 할 수 없습니다.
이것이 전부라면 나는 완벽하게 작동 할 것이다.
그러나 리소스 엔터티 계층 구조에 수량 열을 추가하려고 할 때 문제가 발생합니다. 예를 들어, 작은 집에는 프런트 도어 1 개와 지붕 1 개가 있지만 지붕 및 타일 몬스터 자원에는 많은 지붕 타일이있을 수 있습니다.
리소스 테이블에 수량 열을 추가하면 다음과 같이 표시됩니다.
ID Name Quantity
10000 Little House 1
10001 Font Door 1
10002 Roof 1
10003 Roof Tile 5
10004 Tile Monster 1
이는 지붕 및 타일 몬스터가 5 기와 지붕을 공유해야 문제를 만듭니다. 그래서 자연스럽게 ResourceHierarchy 테이블에 수량 열을 추가하려고합니다. 그러나이 작업을 수행하고 생성 된 코드를 새로 고치 자마자 ResourceHierarchy 테이블을 이전 엔 관계가 아닌 엔티티로 간주합니다. 이제 Resource 테이블로 되돌아 가려면이 개념이 아닌 "Entity/Relationship"을 따라 가야합니다. 이는 매우 간단하지 않습니다. 마치 Resource Entity로 돌아가는 데에만 사용되는 개념 모델에 Entity가 있고 Resource.Children.Add (r)가 db의 ResourceHierarchy 테이블에 새 행을 작성하는지 확실하지 않습니다. . 그것은 내가 관계로서 만 사용하고있는 엔티티의 속성, 즉 수량을 선택하는 것과 같습니다.
이상적으로 ResourceHierarchy 테이블의 Quantity 열은 다음과 같습니다.
Parent_ID Child_ID Quantity
10000 10001 1
10000 10002 1
10002 10003 8
10004 10003 13
그리고 리소스 엔터티는 여전히 자식, 부모 탐색 속성을 가지며 리소스 엔터티의 속성으로 수량 열에 액세스합니다.
수량 열과 수량 열이없는 생성 된 코드를 병합하려고했지만 ResourceHierarchy 테이블이 관계 또는 엔티티 중 하나 일뿐만 아니라 둘 다일 수 있으므로 해석하는 예외가 throw됩니다.
Please HELP!
db의 ResourceHierarchy 테이블에 수량 열을 추가하거나 제외하면 edmx가 크게 변경됩니다.
다음은 샘플 비교입니다. 유일한 차이점은 Resource is ResourceType이고 ResourceHierarchy는 ResourceTypeHierarchy입니다.
SSDL 저장소 모델은 ResourceTypeHierarchy EntityType에 하나의 추가 속성을 제외하고 변경 사항이 없으므로 아래에 포함하지 않을 것입니다. RESOURCETYPEHIERARCHY ON 수량 COLUMN WITHOUT
는
RESOURCETYPEHIERARCHY는
RESOURCETYPEHIERARCHY 지금
,369,136 엔티티 일 RESOURCETYPEHIERARCHY ON QUANTITY 컬럼 관계
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema Namespace="MyModel" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityContainer Name="MyEntities">
<EntitySet Name="ResourceTypes" EntityType="MyModel.ResourceType" />
<AssociationSet Name="ResourceTypeHierarchy" Association="MyModel.ResourceTypeHierarchy">
<End Role="ResourceType" EntitySet="ResourceTypes" />
<End Role="ResourceType1" EntitySet="ResourceTypes" /></AssociationSet></EntityContainer>
<EntityType Name="ResourceType">
<Key>
<PropertyRef Name="ID" /></Key>
<Property Type="Int32" Name="ID" Nullable="false" />
<Property Type="String" Name="Type" Nullable="false" MaxLength="25" FixedLength="false" Unicode="false" />
<NavigationProperty Name="Parents" Relationship="MyModel.ResourceTypeHierarchy" FromRole="ResourceType" ToRole="ResourceType1" />
<NavigationProperty Name="Children" Relationship="MyModel.ResourceTypeHierarchy" FromRole="ResourceType1" ToRole="ResourceType" /></EntityType>
<Association Name="ResourceTypeHierarchy">
<End Type="MyModel.ResourceType" Role="ResourceType" Multiplicity="*" />
<End Type="MyModel.ResourceType" Role="ResourceType1" Multiplicity="*" /></Association></Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
<EntityContainerMapping StorageEntityContainer="MyModelStoreContainer" CdmEntityContainer="MyEntities">
<EntitySetMapping Name="ResourceTypes">
<EntityTypeMapping TypeName="IsTypeOf(MyModel.ResourceType)">
<MappingFragment StoreEntitySet="ResourceType">
<ScalarProperty Name="ID" ColumnName="ID" />
<ScalarProperty Name="Type" ColumnName="Type" /></MappingFragment></EntityTypeMapping></EntitySetMapping>
<AssociationSetMapping Name="ResourceTypeHierarchy" TypeName="MyModel.ResourceTypeHierarchy" StoreEntitySet="ResourceTypeHierarchy">
<EndProperty Name="ResourceType1">
<ScalarProperty Name="ID" ColumnName="Parent_ID" /></EndProperty>
<EndProperty Name="ResourceType">
<ScalarProperty Name="ID" ColumnName="Child_ID" /></EndProperty></AssociationSetMapping></EntityContainerMapping>
</Mapping>
</edmx:Mappings>
IS3210
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
<EntityContainerMapping StorageEntityContainer="MyModelStoreContainer" CdmEntityContainer="MyEntities">
<EntitySetMapping Name="ResourceTypes">
<EntityTypeMapping TypeName="IsTypeOf(MyModel.ResourceType)">
<MappingFragment StoreEntitySet="ResourceType">
<ScalarProperty Name="ID" ColumnName="ID" />
<ScalarProperty Name="Type" ColumnName="Type" /></MappingFragment></EntityTypeMapping></EntitySetMapping>
<EntitySetMapping Name="ResourceTypeHierarchies">
<EntityTypeMapping TypeName="IsTypeOf(MyModel.ResourceTypeHierarchy)">
<MappingFragment StoreEntitySet="ResourceTypeHierarchy">
<ScalarProperty Name="Child_ID" ColumnName="Child_ID" />
<ScalarProperty Name="Parent_ID" ColumnName="Parent_ID" />
<ScalarProperty Name="Quantity" ColumnName="Quantity" /></MappingFragment></EntityTypeMapping></EntitySetMapping>
<AssociationSetMapping Name="FK_Child" TypeName="MyModel.FK_Child" StoreEntitySet="ResourceTypeHierarchy">
<EndProperty Name="ResourceTypeHierarchy">
<ScalarProperty Name="Child_ID" ColumnName="Child_ID" />
<ScalarProperty Name="Parent_ID" ColumnName="Parent_ID" /></EndProperty>
<EndProperty Name="ResourceType">
<ScalarProperty Name="ID" ColumnName="Child_ID" /></EndProperty></AssociationSetMapping>
<AssociationSetMapping Name="FK_Parent" TypeName="MyModel.FK_Parent" StoreEntitySet="ResourceTypeHierarchy">
<EndProperty Name="ResourceTypeHierarchy">
<ScalarProperty Name="Child_ID" ColumnName="Child_ID" />
<ScalarProperty Name="Parent_ID" ColumnName="Parent_ID" /></EndProperty>
<EndProperty Name="ResourceType">
<ScalarProperty Name="ID" ColumnName="Parent_ID" /></EndProperty></AssociationSetMapping></EntityContainerMapping>
</Mapping>
</edmx:Mappings>