我使用LINQ NHibernate的加载的对象和加载热切一个子集合的问题。的对象是这样的:

public class Order
{
    public Guid Id {get; set; }
    public IList<OrderLine> OrderLines {get;set;}
}
public class OrderLine
{
    public Guid Id {get;set;}
    public string Item {get;set;}
}

我想与特定的ID和(热切地)所有的它加载订单的使用LINQ孩子OrderLines。我的查询是这样的:

using (var s = _sessionFactory.OpenSession())
using (var tx = s.BeginTransaction())
{
    var order = from o in s.Linq<Order>().Expand("OrderLines")
                where o.Id == id
                select o;
    return order.First();
}

然而,当我显示顺序,OrderLines属性只包含一个对象 - 数据库中肯定有3奇怪的是,如果我做一个foreach绕回我得到的所有3子项前order - 但这访问数据库两次。

我曾尝试修改所述查询中使用Single()代替,但这并不能工作。

我做得不对的LINQ?或者是我使用Expand的不正确的?

提前,结果,由于 西蒙。

注意:我使用FluentNHibernate自动映射创建我NH映射和我的数据库是SQLite数据库(一个文件,而不是在存储器中)

有帮助吗?

解决方案

看来,这个特征有一个错误:

FirstOrDefault()打破FetchType =使用LINQ加入到NHibernate的

看看所生成的数据库查询,如果它具有TOP 1子句,这可以是该问题。

记住LINQ到NHibernate的是从生产仍然远远准备好,所以,可能会发生这种错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top