0

流暢な 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

APIでこれが可能だとは思いませんQuery<T>.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 に答える