Include добавляет не все данные
В общем, есть 2 сущности:
public class Project
{
public int Id { get; set; }
public string ProjectName { get; set; }
public string ZnName { get; set; }
public virtual ICollection<Task> Tasks { get; set; }
}
public class Task
{
public int Id { get; set; }
public int ProjectId { get; set; }
public string Name { get; set; }
public double? TimePlan { get; set; }
public int? ItemsPlan { get; set; }
public float? ImagesPlan { get; set; }
public virtual Project Project { get; set; }
}
В конфигурационных файлах я настроил отношения между ними:
builder.HasMany(x => x.Tasks)
.WithOne(x => x.Project)
.HasForeignKey(x => x.ProjectId);
builder
.HasOne(t => t.Project)
.WithMany(p => p.Tasks)
.HasForeignKey(t => t.ProjectId);
Я знаю, что достаточно настройки в одну сторону, то от безисходности продублировал их в настройку другой сущности, так как думал, что это решит проблему...
EF Core последняя редакция второй версии.
В своем репозитории делаю вот такую штуку:
var result = await context.Projects.Include(p => p.Tasks)
.AsNoTracking().ToArrayAsync(cancellationToken);
И часть проектов остаются с незаполненной коллекцией Task.
Если попробовать взять какой-то один конкретный проблемный проект и заинклудить в обе стороны:
var project = context.Projects.Where(t => t.Id == 3220).Include(x => x.Tasks).ToList();
var tasks = context.Tasks.Where(t => t.ProjectId == 3220).Include(x=>x.Project).ToList();
То все работает...
Что за ерунда такая?
Ответы (2 шт):
Скорее всего ошибка в настройке контекста. Других не нашел.
modelBuilder.Entity<Project>(entity =>
{
// Тут нет ключа
entity.HasMany(x => x.Tasks)
.WithOne(x => x.Project);
});
modelBuilder.Entity<Task>(entity =>
{
entity.HasOne(t => t.Project)
.WithMany(p => p.Tasks)
.HasForeignKey(t => t.ProjectId);
});
В общем, ошибка была глупой и очень не примечательной...
При биндингах одной из этих сущностей забыли, что она имеет составной PK и указали, как PK только ID. Из-за этого его так штормило при выборках...
Самое интересное, что EF молча считывал данные из таблицы и ему было пофигу на то, что поле отмеченное, как PK в биндингах имело дубли...