Это известная проблема с 4.3 и 4.3.1. (Мы обнаружили, что уже слишком поздно вносить исправления в 4.3.1.) К счастью, есть довольно простой способ изменить код, который должен заставить его работать.
В двух словах, вы имели обыкновение делать цепные вызовы карты для одной EntityConfiguration в 4.1. и 4.2. Примерно так:
modelBuilder.Entity<Parent>()
.Map<Foo>(...)
.Map<Bar>(...);
Это не работает в 4.3, и вместо этого вы должны выполнять каждый вызов Map в EntityConfiguration для этого объекта. Итак, шаблон примерно такой:
modelBuilder.Entity<Foo>()
.Map<Foo>(...);
modelBuilder.Entity<Bar>()
.Map<Bar>(...);
Если рассматривать ваш случай конкретно, это должно сработать:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ParentClass>()
.ToTable("Parent");
modelBuilder.Entity<Foo>()
.Map(m =>
{
m.Requires("IsActive").HasValue(1);
m.Requires("Type").HasValue("Foo");
});
modelBuilder.Entity<Bar>()
.Map(m =>
{
m.Requires("IsActive").HasValue(1);
m.Requires("Type").HasValue("Bar");
});
}
(Я удалил несколько общих параметров, поскольку они не нужны, но это не важно.)
Делая это, используя явные конфигурации EntityConfiguration, вы бы использовали что-то вроде этого:
public class ParentConfiguration : EntityTypeConfiguration<ParentClass>
{
public ParentConfiguration()
{
ToTable("Parent");
}
}
public class FooConfiguration : EntityTypeConfiguration<Foo>
{
public FooConfiguration()
{
Map(m =>
{
m.Requires("IsActive").HasValue(1);
m.Requires("Type").HasValue("Foo");
});
}
}
public class BarConfiguration : EntityTypeConfiguration<Bar>
{
public BarConfiguration()
{
Map(m =>
{
m.Requires("IsActive").HasValue(1);
m.Requires("Type").HasValue("Bar");
});
}
}
А потом
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations
.Add(new ParentConfiguration())
.Add(new FooConfiguration())
.Add(new BarConfiguration());
}
Мы планируем исправить это в 5.0.