我正在查询我的数据库。结构如下所示
国家1..M CountryLocales
1 .. 中号
城市1..M CityLocales
因此,每个国家/地区都有多个区域设置,每个城市都有多个区域设置,一个国家/地区有多个城市。
我尝试从数据库中检索一个城市。我想预取Citylocales,国家和国家/地区。
为此,我执行此查询:
City city = Session.Query<City>()
.Where(x => x.Id == id)
.Fetch(c => c.Country)
.ThenFetch(c => c.CountryLocales)
.FetchMany(x => x.CityLocales)
.AsEnumerable()
.FirstOrDefault();
出于某种原因,我现在获得CountryLocales和CityLocales的重复记录(两次都是)
我该如何解决这个问题?
答案 0 :(得分:3)
您应该查看Future方法。这允许您执行许多步骤而不会遇到此问题。您当前的查询返回了您不想要的笛卡尔积。使用Future方法,您可以使用一个Fetch执行多个查询,然后将其结果聚合在一起,从而产生所需的结果。
它可能会是这样的:
var result = Session.Query<City>()
.Where(x => x.Id == id)
.Fetch(c => c.Country)
.ToFuture();
Session.Query<City>()
.Where(x => x.Id == id)
.Fetch(c => c.CountryLocales)
.ToFuture();
Session.Query<City>()
.Where(x => x.Id == id)
.Fetch(c => c.CityLocales)
.ToFuture();
// execute query
City city = result.AsEnumerable().FirstOrDefault();
请查看此答案以获取更多信息:Multiple Fetches in linq to nhibernate