Nhibernate Fetch / FetchMany / ThenFetch重复结果

时间:2013-06-12 13:57:30

标签: linq nhibernate

我正在查询我的数据库。结构如下所示

国家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的重复记录(两次都是)

我该如何解决这个问题?

1 个答案:

答案 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