문제

나는 다음과 같은 데이터베이스에서 스키마:

  • BillingReferences (ReferencingType 백업 에이전트나 복,ReferencingId 백업 에이전트나 복,ReferencedType 백업 에이전트나 복,ReferencedId 백업 에이전트나 복,IsActive )-모든 분야 제외하고(IsActive)의 일부입니다.
  • BillingType (BillingTypeId 백업 에이전트나 복, 이름 varchar(50))

ReferencingType 및 ReferencedType 은 외국의 열쇠를 BillingTypes.BillingTypes 다음 행이 포함됩니다:

BillingTypeId|름

1|라벨

2|국가

3|PaymentProviders

4|PaymentOptions

5|은행

ReferecingId 및 ReferencedId 의 Id 를 나타내나 다음과 같은 엔터티(에 따라 참조/참조 형):

  • 은행 (은행 id 백업 에이전트나 복, 이름 varchar(50))
  • 국가 (CountryId 백업 에이전트나 복, 이름 varchar(50))
  • 레이블 (LabelId 백업 에이전트나 복, 이름 varchar(50))
  • PaymentProviders (PaymentProviderId 백업 에이전트나 복, 이름 varchar(50))
  • PaymentOptions (PaymentOptionId 백업 에이전트나 복, 이름 varchar(50))

미래에 각각 엔티티가 좀 더 다른 열을 추가 하지만 지금은 이에 대해 스키마 단순합니다.

거기에의 연결(1-)사이의 모든 실체(제외한 국가)하는 국가입니다.레이블이 연결되어 있(1- 용),은행 PaymentProviders 및 PaymentOptions.고 PaymentProviders 야의 연결(1-*)을 PaymentProviders

그래서 예를 들어 내가 원하는 경우 연결과 함께 은행 은행 id201 국가와 CountryId3003 나는 것이 있는 레코드에서 BillingReferences 는 것처럼 보이는:ReferencingType=5 ReferencingId=201 ReferencedType=2 ReferencedId=3003 IsActive=1

우리는 하지 않았 연결/reference 테이블의 각 유형에 대한 연결 때문에 연신 고려면 우리가 추가하려고 하는 다른 법인 우리가 할 일은 추가적 테이블 레코드를 추가 그것을 위해서 BillingReferences 및 BillingType.

문제는 나를 구성할 수 없습 조건부 외국인 핵심 사 BillingReferences 고 각각의 엔티티를 구성/지도 EntityFramework 중...

었을 찾을 수 없는 자를 들어 사용하는 이 유형의 구현합니다.나밖에 없을 만들에 대한 참조를 위한 테이블은 각 연결은 있을 구성할 수 있는 방법을 이 EntityFramework?

도움을 주셔서 감사합니다:)

도움이 되었습니까?

해결책

Afaik,이를 수행 할 방법이 없습니다.

당신이 정말로 아무런 이유가 없다면, 나는 각 유형에 대해 별도의 테이블을 만들고 갈 것입니다. 당신이 언급 한 고려 사항은 좋은 것이 아닙니다, IMHO.

테이블이 더 많으면 키에 외국 키 제약 조건을 넣을 수 있으며 EF로 잘 번역됩니다. 또한 성능에 도움이됩니다. 백만 행을 가진 큰 엉덩이 참조 테이블은 더 작은 테이블보다 쿼리하는 데 더 많은 시간이 걸립니다 (항상 유형에 대한 모든 참조를 원하지 않는 한).

다른 팁

엔티티 프레임 워크에서이를 수행 할 방법이 없을뿐만 아니라 SQL에서도 할 수있는 방법도 없습니다. 5 개의 다른 테이블 중 하나를 참조하는 외국 키를 가질 수 없습니다.

대신해야한다고 생각하는 것은 부모, 추상 참조 유형을 갖고이 부모 유형의 콘크리트 유형 하위 유형을 만드는 것입니다. 이제 하나의 테이블에 외국 키가 하나뿐입니다. 계층 매핑 당 유형 또는 테이블 당 테이블을 선택할 수 있습니다. 언급 한 유형에 특별한 열이 없다는 것을 감안할 때 계층 별 매핑 당 테이블 당신을 위해 더 나은 선택이 될 것입니다.

유일한 방법은 작업을 수행할 수 있습니다 당신이 원하는 무엇을 구축하는 것 트리거 처리를 처리하는 서버 사이드에서 작동합니다.할 수 없습니다 지도 FK 의 좋아하는 여러 테이블이 있습니다.하지만 트리거 처리할 수 있는 논리입니다.의 코스는 것은 완전히 외부 EF...

나는 또한 당신을 구축 별도 표시됩니다.간단하게 유지에 나는 생각한다.

글쎄, 나는 사용자의 추론의 제안을하고 각 유형에 대해 별도의 테이블을 만들 것이라고 생각합니다.

답변 해 주셔서 감사합니다 많이 :)

SQL에서는 단일 테이블을 기반으로 각 유형에 대한보기를 만들 수 있습니다. 각보기는 결합을 수행하여 해당 유형과 관련된 정보를 검색 할 수 있습니다. 이것은 또한 링크를 전체 유형을 무시하는 것으로 생각할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top