0

我是 fluent nhibernate 的新手,遇到以下 NHibernante 错误:

Initializing[Toto.Business.Catalog.Unit#059fb247-df11-4457-8a4d-7c8b984a155e]-failed to lazily initialize a collection of role: Toto.Business.Catalog.Unit.Values, no session or session was closed

当我尝试访问item.Product.Product.Unit.Values. 我想通过在覆盖 IAutoMappingOverride 时使用 .Not.LazyLoad() 来解决它,但它会在我无法触及的其他视图上刹车。

我尝试了一些类似的东西:

        NHibernateSession.Current.Query<BasketItem>()
                         .Fetch(e => e.Product.Product)
                         .ThenFetchMany(e => e.Unit.Values);

这不会改变任何事情。我尝试添加:

   foreach (var item in CurrentUserBasket.Items.Where(item => item.Product != null && item.Product.Product != null && item.Product.Product.Unit != null))
            {               
                NHibernateSession.Current.Load<IList<UnitValue>>(item.Product.Product.Unit.Values);
            }

但我给了我错误:

Unable to locate persister for the entity named 'System.Collections.Generic.IList`1[[Toto.Business.Catalog.UnitValue, Toto.Business, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]'.

编辑

我想在我的视图中访问 item.Product.Product.Unit.Values,我该怎么做?

4

1 回答 1

1

我不相信Query<T>api 可以做到这一点,我很确定它只允许你获取 1 的最大深度。

你可以用QueryOver<T>API 做到这一点。

类似的东西

Product product = null;
Product nestedProduct = null;
Unit unit = null;
Value value = null;

var result = NHibernateSession
    .Current
    .QueryOver<BasketItem>()
    .JoinAlias(x => x.Product, () => product)
    .JoinAlias(x => x.Unit, () => unit)
    .JoinAlias(() => product.Product, () => nestedProduct)
    .JoinAlias(() => unit.Values, () => value)

同样值得记住的是,FluentNHibernate 只是 nhibernate 的替代映射,它不会改变您在查询方面使用 nhibernate 的方式。

于 2013-06-19T09:19:33.433 回答