Отсутствующие столбцы идентификаторов для производных типов со стратегией TPH после перехода на EFCore 2.2 - PullRequest
0 голосов
/ 12 марта 2019

Я перенес свое приложение из EF6 в EFCore 2.2, и у меня возникла проблема с отображением абстрактного типа с производными типами в одну таблицу.Стратегия наследования TPH.

public abstract class GoalExpectation : Entity { ... }
public class AtLeastGoalExpectation : GoalExpectation { ... }
public class AtMostGoalExpectation : GoalExpectation { ... }

Отображение и контекст базы данных определены таким образом

public class MyDbContext : Microsoft.EntityFrameworkCore.DbContext
{
    public DbSet<GoalExpectation> GoalExpectations { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
         // to avoid declare DbSets for derived types (accoring to docs)
         modelBuilder.Entity<AtLeastGoalExpectation>();
         modelBuilder.Entity<AtMostGoalExpectation>();

         modelBuilder.ApplyConfiguration(new GoalExpectationTypeConfig());
    }
}

public class GoalExpectationTypeConfig : IEntityTypeConfiguration<GoalExpectation>
{
    public void Configure(EntityTypeBuilder<GoalExpectation> builder)
    {
        builder.ToTable("GoalExpectations");

        builder.HasDiscriminator<string>("Discriminator")
            .HasValue<AtLeastGoalExpectation>("AtLeastGoalExpectation")
            .HasValue<AtMostGoalExpectation>("AtMostGoalExpectation")
     }
}

При выполнении этого запроса я получаю следующую ошибку

    public List<Goal> GetGoalsWithTimeLimit(long userId, DateTime date)
    {
        var queryable = _dbContext.Goals
            .Include(p => p.ProgressItems)
            .Where(p => p.Owner.Id == userId)
            .Where(p => p.FinishDate.HasValue || p.ProgressFrequency != null);

        return queryable.ToList();
    }

System.Data.SqlClient.SqlException: 'Неверное имя столбца' AtLeastId '.Неверное имя столбца 'AtMostId'.

...