为了账号安全,请及时绑定邮箱和手机立即绑定

使用实体框架查询多对多关系

使用实体框架查询多对多关系

C#
墨色风雨 2022-07-23 17:40:06
我是 C# 实体框架的新手。我创建了三个类 - 国家 - 区域 - 子区域Country 和 Area 之间存在多对多的关系。Area 和 Subarea 之间还有另一种多对多的关系。一个国家可以包含许多区域,但也有属于多个国家的区域)。区域和子区域也是如此。我创建了相应的类,并且数据库表已自动创建。CountryAreas 和 SubAreaAreas 的表也已创建,所以一切看起来都不错。外键看起来也不错。我可以通过(见下文)将数据写入表中。我现在正在努力从数据库中选择具有相应区域和子区域的所有国家。我读了几篇文章,看起来我缺乏关于 LINQ 查询和实体框架的基本知识。public class Country{    #region attributes    [Key]    public string Name { get; set; }    public List<Area> Areas { get; set; } // virtual enabled lazy loading    #endregion}public class Area{    #region attributes    [Key]    public string Name { get; set; }    public virtual List<SubArea> Subareas { get; set; }    public virtual List<Country> Countries { get; set; }    #endregion}public class SubArea{    #region attributes    [Key]    public string Name { get; set; }    public virtual List<Area> Areas { get; set; }    #endregion}public class LocationScoutContext : DbContext{    public LocationScoutContext()        : base("name=LocationScout")    {    }    public DbSet<Country> Countries { get; set; }    public DbSet<Area> Areas { get; set; }    public DbSet<SubArea> SubAreas { get; set; }}// *** reading the data works fine ***using (var db = new LocationScoutContext()){   db.Countries.Add(newCountry);   db.SaveChanges();}// *** I tried this ***var allCountries = new List<Countries>();using (var db = new LocationScoutContext()){   var query = from c in db.Countries select c;}foreach (var c in query){   allCountries.Add(c);}我尝试了上面显示的方法,但这显然没有做任何连接,只是给了我带有空白区域和子区域的国家/地区的名称。
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

尝试如下。这将给出所有countries与它的areassubareas

对于 EF 6.x:

using (var db = new LocationScoutContext())
{   var countries = db.Countries.Include(c => c.Areas.Select(a => a.SubAreas)).ToList();
}

对于 EF 核心:

using (var db = new LocationScoutContext())
{   var countries = db.Countries.Include(c => c.Areas).ThenInclude(a => a.SubAreas).ToList();
}


查看完整回答
反对 回复 2022-07-23
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信