1

我正在使用.NET Core和EF Core作爲Web項目。我正在努力如何查詢多對多的關聯。這是我的模型是這樣的:如何在EF核心中查詢多對多的關聯

public class Begrip 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Desc { get; set; } 
    [Url] 
    public string URL { get; set; } 
    public ICollection<BegripCategory> Categories { get; set; } 
} 

public class Category 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public ICollection<BegripCategory> Begrippen { get; set; } 
} 

public class BegripCategory 
{ 
    public int begripId { get; set; } 
    public Begrip begrip { get; set; } 
    public int categoryId { get; set; } 
    public Category category { get; set; } 
} 

和我的數據庫上下文:

public class PBBContext : DbContext 
{ 
    public PBBContext (DbContextOptions<PBBContext> options) 
     : base(options) 
    { 
    } 

    public DbSet<PBB.Models.Movie> Movie { get; set; } 
    public DbSet<PBB.Models.Begrip> Begrip { get; set; } 
    public DbSet<PBB.Models.Category> Category { get; set; } 
    public DbSet<PBB.Models.BegripCategory> BegripCategory { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelbuilder) 
    { 
     modelbuilder.Entity<BegripCategory>().HasKey(bc => new { bc.begripId, bc.categoryId }); 

     modelbuilder.Entity<BegripCategory>().HasOne(b => b.begrip).WithMany(bg => bg.Categories).HasForeignKey(bc => bc.begripId); 
     modelbuilder.Entity<BegripCategory>().HasOne(c => c.category).WithMany(ca => ca.Begrippen).HasForeignKey(cc => cc.categoryId); 
    } 
} 

什麼即時試圖做的是返回所有「Begrippen」在JSON結果與所有相應的「分類「,但是,我無法弄清楚如何獲得他們的」類別「列表。

任何想法?提前致謝。

回答

5

EF核心不會自動加載相關的屬性,所以你需要明確地做到這一點,但類似下面應該做的伎倆:

var result = context.Begrip 
    .Include(x => x.Categories) 
    .ThenInclude(x => x.category); 

注意,智能感知並不總是有效的.ThenInclude,但代碼仍然應該編譯,即使它獲得了紅色下劃線。

如果你回到這個給視圖或API,你可能會想將它映射到DTO,所以你不必應付.Categories[0].category.Name

+0

其所謂的[預先加載( https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx) – LeeonTM