как правильно выводить данные в связи "Многие ко многим" в EntityFrameworkCore Mysql

Допустим есть две таблицы: Games и Manufacture. Игра может в себе хранить несколько издателей, а издатель может в себе хранить несколько игр. В таком случае создаю ассоциативный класс Product. В итоге получаются такие классы:

public class Game
{
    public int Id { get; }

    [Display(Name = "название игры")]
    public string Titleofgame { get; set; }

    [Display(Name = "Описание")]
    public string Description { get; set; }

    [Display(Name = "Дата выхода")]
    public DateTime DateRelese { get; set; }

    public List<Manufacture> Manufactures { get; set; } = new List<Manufacture>();

    public List<Product> Products { get; set; } = new List<Product>();
}

public class Manufacture
{
    public int Id { get; }

    [Display(Name = "Издатель")]
    public string Titleofmanufactures { get; set; }

    public List<Product> Products { get; set; }

    public List<Game> Games { get; set; }
}

DBContext:

public DbSet<Game> Games { get; set; }
public DbSet<Manufacture> Manufactures { get; set; }
public DbSet<Product> Products { get; set; }

Затем сопоставляю связи через Fluent Api:

modelBuilder
    .Entity<Game>()
    .HasMany(c => c.Manufactures)
    .WithMany(s => s.Games)
    .UsingEntity < Product > (
       j => 
        j.HasOne(pt => pt.Manufacture)
        .WithMany(t => t.Products)
        .HasForeignKey(pt => pt.Idmanufacture),
    j => 
        j.HasOne(pt => pt.Game)
        .WithMany(p => p.Products)
        .HasForeignKey(pt => pt.idgame),                  
    j =>
    {
        j.HasKey(t => new { t.idgame, t.Idmanufacture ,});
        j.ToTable("Products");
    }
);

И предположим уже добавил игру с двумя производителями. Затем хочу вывести для проверки всех производителей определённой игры:

Context.Games.Select(p=>p.Manufactures.Select(d=>d.Titleofmanufactures)

В итоге я получаю только первого производителя. Затем я устанавливаю, чтобы не отслеживались объекты контекста:

optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);

В итоге у меня показались все производители. Почему так происходит? Перерыл всё что мог, но ясного объяснения (для меня) не нашёл.


Ответы (0 шт):