Я моя модель домена У меня есть 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; }
...
}
Моя стратегия отображения для этих типов таблица на иерархии, так что в моем классе DbContext я только определить DbSets для базовых классов, w Хич делает меня способным выполнять как полиморфные и не полиморфные запросы:
public DbSet<Company> Companies { get; set; }
public DbSet<FundsAccount> FundsAccounts { get; set; }
Сейчас идет сложная часть, мои требования заявить, что:
- Поставщик должен не есть аккаунт средства
- Дилер должен иметь дилерFundsAccount
- Розничный торговец должен иметь розничный торговецФундсАккаунт
Это должно быть это просто:
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, все из которых желательны, но поскольку я определил две взаимно-однозначные отношения между подтипами, EF пытается для определения внешнего ключа в поле Ids FundsAccount дважды.
Я знаю, что я могу взломать решение, указав отношения «один ко многим» для каждой из таблиц Компании, у которых есть учетная запись средств, предотвращая поведение «один ко многим» с использованием уникальных ограничений в его FK, но я хотел уточните у вас, есть ли лучшее решение.
Никто? Я начинаю думать, что это проблема миграции, я пытался реплицировать проблему в новом решении, и у меня не было ошибок. –