Список отношений EF Core One-to-Many возвращает ноль - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь научиться правильно использовать DbContext в EF Core. У меня есть командный класс:

public class Team 
{
    public int ID { get; set; }
    public string Name { get; set; }
    public bool CanSelfManage { get; set; } = false;
    public virtual List<Mileage> Mileages { get; set; }
    public IdentityUser Member { get; set; }
    public string State { get; set; }
    public List<Horse> Horses { get; set; }
}

и класс пробега:

public class Mileage
{
    public int ID { get; set; }
    public virtual Team Team { get; set; }
    public virtual int TeamID { get; set; }
    public DateTime Date { get; set; }
    public LogType Type { get; set; }
    public decimal Miles { get; set; }
    public IdentityUser User { get; set; }
    public List<Horse> Horses { get; set; }
}

А мой класс DbContext содержит

public DbSet<Team> Teams { get; set; }
public DbSet<Mileage> Mileages { get; set; }
public DbSet<Horse> Horses { get; set; }
public DbSet<SecurityEntry> SecurityEntries { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<Mileage>()
        .HasOne(t => t.Team)
        .WithMany(b => b.Mileages)
        .HasForeignKey(t => t.TeamID)
        .IsRequired();
    modelBuilder.Entity<Horse>()
        .HasOne(t => t.Team)
        .WithMany(h => h.Horses);
    modelBuilder.Entity<Horse>()
        .HasMany(m => m.Mileages);
    modelBuilder.Entity<Mileage>()
        .HasMany(h => h.Horses);
}

Проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, что я делаю, Team.Mileages возвращает ноль и никогда не заполняется.
Если я устанавливаю Список не отображаемым, внедряю DbContext и пытаюсь запустить что-либо вне контекста, он выдает следующую ошибку:

Вторая операция началась в этом контексте перед предыдущей операцией завершено

Есть что-то вопиющее, что мне не хватает? Я использую MySQL, если это что-то меняет.

1 Ответ

0 голосов
/ 17 марта 2019

Entity Framework по умолчанию использует отложенную загрузку, либо вы настроены на активную загрузку и всегда загружаете свои ссылки, либо запрашиваете свои коллекции по запросу базы данных. Пример:

_dbcontext.Team.Include(team => team.Mileages).ToList();
...