c# - 如何在 EF Core 中查询多对多关系

标签 c# asp.net-mvc entity-framework asp.net-core entity-framework-core

我正在为 Web 项目使用 .NET Core 和 EF Core。我正在努力如何查询多对多关系。这是我的模型的样子:

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);
    }
}

我想做的是返回 JSON 结果中的所有“Begrippen”以及所有相应的“类别”,但是,我无法弄清楚如何获取它们的“类别”列表。

有什么想法吗?提前致谢。

最佳答案

EF Core 不会自动加载相关属性,因此您需要明确地执行此操作,但类似以下内容应该可以解决问题:

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

请注意,intellisense 目前并不总是适用于 .ThenInclude,但即使代码带有红色下划线,它仍应编译。

如果您要将其返回到 View 或 API,您可能希望将其映射到 DTO,这样您就不必处理 .Categories[0].category.Name

关于c# - 如何在 EF Core 中查询多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44500007/

相关文章:

c# - 我如何传递 MemberInitExpression 对象

c# - 在检查器中设置值是否与在 Unity 中设置默认值相同?

c# - 为什么 CancellationToken 与 CancellationTokenSource 是分开的?

jquery - 检索 jQuery 自动完成字段

c# - 将 asp.net MVC 从 5.0.0-beta2 更新到 5.0.0-rc1

entity-framework - 首先更新 Entity Framework 代码中的记录的单个属性

c# - Entity Framework 4 中无法加载指定的元数据资源错误

c# - 关闭通用接口(interface)的类的实例不能隐式转换为通用接口(interface)类型的成员

c# - 如何在 C# 中的 PropertyChanged 事件的 INotifyPropertyChanged 实现中捕获旧值和新值

C#:如何在 Javascript 中使用全局变量