相关疑难解决方法(0)

急切地获取多个集合属性(使用QueryOver/Linq)?

我发现了2个类似的问题:

根据这个页面:

注意不要急于同时获取多个集合属性.虽然这个声明可以正常工作:

var employees = session.Query<Employee>()
    .Fetch(e => e.Subordinates)
    .Fetch(e => e.Orders).ToList();
Run Code Online (Sandbox Code Playgroud)

它对数据库执行笛卡尔积产品查询,因此返回的总行数将是总下属乘以总订单数.

可以说我有以下型号:

public class Person
{
    public virtual int Id { get; private set; }
    public virtual ICollection<Book> Books { get; set; }
    public virtual ICollection<Article> Articles { get; set; }
    public virtual ICollection<Address> Addresses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用QueryOver/Linq(不返回笛卡尔积),急切地使用书籍,文章和地址加载所有人的最简单方法是什么?

谢谢


更新:

cremor回答下面和弗洛里安林回答这个线程.以下代码很好地工作,只有一次往返数据库.

var persons = session.QueryOver<Person>()
    .Future<Person>();
var persons2 = session.QueryOver<Person>() …
Run Code Online (Sandbox Code Playgroud)

nhibernate linq-to-nhibernate queryover

35
推荐指数
2
解决办法
2万
查看次数

nhibernate交替批量大小

使用NHibernate执行查询时,如果将其设置为大于实际返回的结果,则似乎不尊重批量大小.

我正在使用最新版本的NHibernate 2.1.0.4000和Linq的GA到NHibernate.我有一个类似于Order的对象结构,它有一个OrderLines集合.OrderLines已被定义为包含以下xml的包:

<bag name="OrderLines" access="field.camelcase" table="MyDatabase.OrderLines" lazy="true"   batch-size="50">
    <key column="OrderId"/>
    <one-to-many class="OrderLine"/>
</bag>
Run Code Online (Sandbox Code Playgroud)

如果我查询Orders并获得50个结果,它会在单个查询中正确选择所有OrderLines,但如果我得到的结果少于50个,那么它似乎不符合定义的批量大小.

例如,如果执行3次查询,批量大小为25,12和3,则返回40个结果而不是50个

看起来它试图猜测要使用的正确批量大小(即它首先是批量大小的1/2,然后是剩余的1/2等).我希望它一直执行50的批量大小,如果少,那么批量大小尽可能大,在这种情况下批量大小为40.

如何让NHibernate尊重我在所有情况下定义的批量大小?

nhibernate

6
推荐指数
1
解决办法
1925
查看次数

标签 统计

nhibernate ×2

linq-to-nhibernate ×1

queryover ×1