我想NH 3.3.1.4000升级到最新版本,NH 4.0.2.4000,我有一个问题,支持fetchmany和ThenFetchMany。
在本文中,我了解到,这个旧功能不再有效,Breaking与NHibernate 4的变化升级。
什么是做这种获取的新的NH版本的正确方法是什么?
code例:
VAR IdsList =新名单{/ *有些IDS * /};
session.Query< A>()
.FetchMany(X => x.B_ObjectsList)
.ThanFetchMany(X => x.C_ObjectsList)
。凡(X => IdsList.Contains(X => x.Id))
.ToList();
类:
公共类
{
公众诠释编号{获取;集;}
公众的IList< B> B_ObjectsList {获取;集;}
}
公共B类
{
公众诠释编号{获取;集;}
公众的IList< C> C_ObjectsList {获取;集;}
}
公共C级
{
公众诠释编号{获取;集;}
}
映射:
<类名=A表=A>
< ID名称=ID类型=INT列=ID未保存值=0>
<生成器类=身份/>
< / ID>
<包名=B表=B逆=假懒惰=真正的
级联=全删除,孤儿>
< /类>
<类名=B表=B>
< ID名称=ID类型=INT列=ID未保存值=0>
<生成器类=身份/>
< / ID>
<包名称=C表=C逆=假懒惰=真正的
级联=全删除,孤儿>
< /类>
<类名=C表=C>
< ID名称=ID类型=INT列=ID未保存值=0>
<生成器类=身份/>
< / ID>
< /类>
解决方案
也许
VAR IdsList =新名单{/ *有些IDS * /};
VAR的结果= session.Query< A>()
.FetchMany(X => x.B_ObjectsList)
。凡(X => IdsList.Contains(x.Id))
.ToList();
//初始化C_ObjectsList
VAR出价= results.SelectMany(X => x.B_ObjectsList)。选择(B => b.Id)。.Distinct()了ToList();
session.Query< B>()
.FetchMany(X => x.C_ObjectsList)
。凡(B => bIds.Contains(b.Id))
.ToList();
返回结果;
I tried to upgrade NH 3.3.1.4000 to the latest version NH 4.0.2.4000 and I had an issue with FetchMany and ThenFetchMany.
In this post I learned that this old functionality is no longer valid, Breaking changes with NHibernate 4 upgrade.
What is the correct way to do this kind of fetching on the new NH version?
Code Example:
var IdsList = new List { /* Some Ids */ };
session.Query<A>()
.FetchMany(x=>x.B_ObjectsList)
.ThanFetchMany(x=>x.C_ObjectsList)
.Where(x=>IdsList.Contains(x=>x.Id))
.ToList();
Classes:
Public Class A
{
public int Id {get;set;}
public IList<B> B_ObjectsList{get;set;}
}
Public Class B
{
public int Id {get;set;}
public IList<C> C_ObjectsList {get;set;}
}
Public Class C
{
public int Id {get;set;}
}
Mapping:
<class name="A" table="A">
<id name="Id" type="int" column="Id" unsaved-value="0">
<generator class="identity" />
</id>
<bag name="B" table="B" inverse="false" lazy="true"
cascade="all-delete-orphan">
</class>
<class name="B" table="B">
<id name="Id" type="int" column="Id" unsaved-value="0">
<generator class="identity" />
</id>
<bag name="C" table="C" inverse="false" lazy="true"
cascade="all-delete-orphan">
</class>
<class name="C" table="C">
<id name="Id" type="int" column="Id" unsaved-value="0">
<generator class="identity" />
</id>
</class>
解决方案
probably
var IdsList = new List { /* Some Ids */ };
var results = session.Query<A>()
.FetchMany(x => x.B_ObjectsList)
.Where(x=>IdsList.Contains(x.Id))
.ToList();
// initialize C_ObjectsList
var bIds = results.SelectMany(x => x.B_ObjectsList).Select(b => b.Id).Distinct().ToList();
session.Query<B>()
.FetchMany(x => x.C_ObjectsList)
.Where(b => bIds.Contains(b.Id))
.ToList();
return results;
上一篇:的SafeHandle和HandleRefSafeHandle、HandleRef
下一篇:部署从Visual Studio 2013的Azure webjobs时,有些组件没有被包括在内组件、Studio、Visual、webjobs