Я получаю исключение проверки, которое возникает только во время работы моего веб-приложения, но не при запуске автоматических тестов с использованием MSTest (даже эти тесты используют те же компоненты).
Соответствующий код следует:
public abstract class BaseThing
{
public int Id {get;set;}
//other properties
}
public class BaseThingConfig :EntityTypeConfiguration<BaseThing>
{
ToTable("BaseThingTable");
HasKey(d=>d.Id);
Property(d=>d.Id).HasColumnName("SomeId");
Map<ThingChild1>(d=>d.Requires("ThingType").HasValue(1);
Map<ThingChild2>(d=>d.Requires("ThingType").HasValue(2);
Map<ThingChild3>(d=>d.Requires("ThingType").HasValue(3);
}
public class ThingChild1 : BaseThing
{
public long AggregateRootId {get;set;}
//other stuff
}
public class ThingChild1Config : EntityTypeConfiguration<ThingChild1>
{
Property(d=>d.AggregateRootId).IsRequired().HasColummName("DifferentId");
}
//the other two child classes of BaseThing and their configs look similar
public class AggregateRoot
{
public int Id {get;set;}
public virtual ICollection<ThingChild1> ThingChildren1 {get; private set;}
public virtual ICollection<ThingChild2> ThingChildren2 {get; private set;}
public virtual ICollection<ThingChild2> ThingChildren3 {get; private set;}
}
public class AggregateRootConfig : EntityTypeConfiguration<AggregateRoot>
{
HasMany(d=>d.ThingChildren1).WithRequired().HasForeignKey(a=>a.AggregateRootId);
HasMany(d=>d.ThingChildren2).WithRequired().HasForeignKey(a=>a.AggregateRootId);
HasMany(d=>d.ThingChildren3).WithRequired().HasForeignKey(a=>a.AggregateRootId);
}
Когда я запускаю код, который использует эти классы для возврата экземпляра AggregateRoot из базы данных, используя его идентификатор, все работает нормально.Но когда я запускаю тот же код через наше веб-приложение (которое использует SimpleInjector для включения DbContext в игру), я получаю следующее исключение при переходе к вызову dbContext.AggregateRoots.FirstOrDefault(d=>d.Id=id);
Один или несколькоВо время генерации модели были обнаружены ошибки проверки:
DifferentId:: Нет свойства с именем «DifferentId», определенного в типе, указанном в роли «BaseThing».DifferentId:: Нет свойства с именем «DifferentId», определенного в типе, указанном в роли «BaseThing».
Я попытался переместить это свойство в базовый класс, удалив его издочерние классы, и обновление дочерних классов, но это заставляет другие вещи идти на юг, такие как нарушения FK.Некоторое время я следовал по этому пути, но ничего не смог сделать.
Мы используем EF 6.2.
Если у кого-то есть какие-либо идеи, я бы хотел их услышать.Надеюсь, мой пример кода имеет смысл.Заранее спасибо.