나는 다음과 같은 테이블 구조가 : 내 파티를 사용매핑하는 동안 속성으로 외래 키 노출에 충돌
Parties
Id Name
100 Hank
200 Ted
300 Kim
400 Joe
Affiliations
Id Party1 Party2
1 100 200
2 300 400
그리고 소속의 FKS를 통해 참조 테이블을 엔티티 (표시되지 않음), Fluent API를 사용하여 테이블 간의 관계를 정의합니다.
modelBuilder.Entity<Party>()
.HasMany(c => c.LeftPartyAffiliations)
.WithRequired()
.Map(m => m.MapKey("Party1"));
modelBuilder.Entity<Party>()
.HasMany(c => c.RightPartyAffiliations)
.WithRequired()
.Map(m => m.MapKey("Party2"));
파티 엔티티는 왼쪽 및 오른쪽 관계를 각각의 속성 인 LeftPartyAffiliations 및 RightPartyAffiliations에 매핑합니다. 위의 규칙을 정의하면 EF가 Affiliations 테이블에 Party1 및 Party2을 자동으로 추가합니다.
내 문제는 각 제휴지도의 값이 올바르게 표시되지만이 표를 내 열에 매핑 할 때 왼쪽 및 오른쪽에있는 제휴 ID를 알 수있는 방법이 없다는 점입니다 내 당 관계를 통해. 예를 들어
, 나는 실제 Party1에 액세스 할 수 있도록하고 싶습니다과 Party2 ID를 내 제휴 법인을 통해 :
public class PartyAffiliation
{
...
[Column("Party1")]
public int Party1 { get; set; }
[Column("Party2")]
public int Party2 { get; set; }
...
}
을 ...하지만 난 이미 매핑을 통해 나의 관계를 정의하고 이것은 불가능하다 Fluent API를 통해 Party의 왼쪽 및 오른쪽 컬렉션으로 이동합니다.
완벽하게 배치하면 Fluent API 매핑을 사용하여 열과 관계를 만들뿐 아니라 내 Affiliation 매핑에 정의 된 물리적 열을 통해 내 Party1 및 Party2 Id에 액세스 할 수 있습니다. 내가 엔티티뿐만 아니라 유창함 API에 phyically 속성을 정의하려고하면
, 내가 얻을 : 유형에
각 속성 이름은 고유해야합니다. 속성 이름은 이미 이 문제 또는 물리적으로 데이터베이스에 추가 필드를 추가하지 않고 여러 속성에 열을 매핑하는 방법에 대한 해결 방법은 'XXX'
정의?
Affiliations 테이블의 구조를 일반으로 변경하는 것이 더 쉽지 않을까요? Id, PartyId, Type 필드가 있습니다. 그렇게하면 세 번째 열로 필터링 할 수 있고 고정 된 두 개의 열 대신에 원하는만큼 광고 할 수 있습니다 (party1, party2, party3, ..., n) – amhed
@amhed 주목해야 할 것은, 데이터베이스 구조를 제어하십시오.필자는 기본적으로 디자인을 기반으로 구조를 생성하기 위해 먼저 코드를 사용했습니다. –
데이터베이스에 이미 키가 있습니까? 왜 데이터베이스 우선 접근법을 사용하지 않습니까? – amhed