急切的装载问题

时间:2011-06-07 08:44:58

标签: nhibernate linq-to-nhibernate

我遇到这个linq到nhibernate查询的问题

var listeShopping = (from cart in session.Query<Cart>()
    .Fetch(cart => cart.ItemShopping)
    .ThenFetch(item => item.Manufacturer)
    select cart.ItemShopping).ToList<ItemShopping>();

当我启动它时,我发现了一个奇怪的错误:

Query specified join fetching, but the owner of the fetched association was
not present in the select list [FromElement{explicit,not a collection join,
fetch join,fetch non-lazy properties,classAlias=_1,role=,tableName= (...)

我需要急切的加载,我该如何避免这个错误?如果它可以提供帮助,我会提到我只使用购物车表作为内连接表。我只需要知道购物车中的ItemShopping。

此致

修改

我修改了代码,使其可以用英语阅读。我更正了错误。

修改2

我找到了这个方法,它似乎有用......如果我没有出错,有人可以检查吗?

        var list = (from item in session.Query<ItemShopping>()
                   .Fetch(item => item.Manufacturer)
                   from cart in item.Cart
                   select item).ToList<ItemShopping>();

1 个答案:

答案 0 :(得分:0)

我认为用Linq处理这种情况是不可能的。但它与HQL:

var listeShopping = session.CreateQuery(@"
    select item
    from Cart cart
    join cart.ItemShopping item
    join fetch item.Manufacturer
    ")
    .List<ItemShopping>();

附注:急切地以这种方式获取制造商并不一定是表现最佳的方法。请考虑在Manufacturer类中使用batch-size