[英]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);
}
我嘗試了如上所示的操作,但是顯然沒有進行任何連接,只是給了我具有空區域和分區的國家的名稱。
任何幫助表示贊賞:-)
嘗試如下。 這將使所有具有其areas
和subareas
的countries
。
對於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.