Я перенес свое приложение из 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'.