나는 내 도메인 모델 나는 추상적이며, 세 가지 다른 회사 유형은 회사의 서브 클래스로 표시되는 Company
기본 클래스가 : 같은 방법으로EF-마이그레이션 FK 오류
public abstract class Company
{
public int Id { get; set; }
...
}
public class Supplier : Company
{
...
}
public class Dealer : Company
{
public DealerFundsAccount FundsAccount { get; set; }
...
}
public class Retailer : Company
{
public RetailerFundsAccount FundsAccount { get; set; }
...
}
을 , 나는 기금 계정 및 특정 속성을 구현하는 두 가지 하위 유형을 정의하는 또 다른 기본 클래스가 있습니다
public abstract class FundsAccount
{
public int Id { get; set; }
...
}
public class DealerFundsAccount : FundsAccount
{
public Dealer Dealer { get; set; }
...
}
public class RetailerFundsAccount : FundsAccount
{
public Retailer Retailer { get; set; }
...
}
나는 단지에 대한 DbSets을 정의 테이블 당 계층 구조 내 DbContext 클래스 있도록 이러한 유형에 대한 나의 매핑 전략이다 기본 클래스, w HICH 모두 다형성과 비 다형성 쿼리를 수행 할 날 수 있습니다 :
이public DbSet<Company> Companies { get; set; }
public DbSet<FundsAccount> FundsAccounts { get; set; }
이제 까다로운 부분 온다, 내 요구 사항은 그 상태 :
- 공급 자금이
- 계정이없는합니다 딜러는 DealerFundsAccount가 있어야합니다.
- 소매 업체는 소매 업체가 있어야합니다.
그것은이 간단해야한다 :
modelBuilder.Entity<Retailer>()
.HasRequired(r => r.FundsAccount)
.WithRequiredDependent(rfa => rfa.Retailer);
modelBuilder.Entity<Dealer>()
.HasRequired(d => d.FundsAccount)
.WithRequiredDependent(dfa => dfa.Retailer);
그러나 EF 마이그레이션 비참 데이터베이스 스키마를 업데이트하려고 실패. TPH로 인해 RetailerFundsAccounts 및 DealerFundsAccounts가 모두 FundsAccount db 테이블에 매핑되는 동안 Dealer 및 Retailers는 동일한 회사 데이터베이스 테이블에 매핑되지만 하위 유형간에 두 개의 일대일 관계를 정의했기 때문에 EF 은 FundsAccount Id 필드의 외래 키를 두 번으로 정의하십시오.
자금 계정이있는 회사 테이블 각각에 대해 일대 다 관계를 정의하여 솔루션을 해킹 할 수 있음을 알고 있습니다. 고유 한 제약 조건을 사용하는 일대 다 행동을 FK로 막지 만, 더 나은 해결책이 있는지 확인하십시오.
아무도 없습니까? 이 문제가 마이그레이션 문제라고 생각하기 시작했습니다. 새로운 솔루션에서 문제를 재현하려고 시도했지만 오류가 없습니다. –