簡體   English   中英

使用實體框架查詢多對多關系

[英]Query many-to-many relationships with Entity Framework

我是C#實體框架的新手。 我創建了三個類-國家-區域-分區

國家與地區之間存在多對多關系。 區域和子區域之間還有另一對多關系。

一個國家/地區可以包含多個區域,但是也可以包含多個國家/地區所屬的區域。 區域和子區域相同。

我創建了各自的類,並且數據庫表已自動創建。 也已經創建了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);
}

我嘗試了如上所示的操作,但是顯然沒有進行任何連接,只是給了我具有空區域和分區的國家的名稱。

任何幫助表示贊賞:-)

嘗試如下。 這將使所有具有其areassubareascountries

對於EF 6.x:

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

對於EF Core:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM