1

次のクエリを機能させようとしています。

Session.Linq<FooBar>()
    .SetCachable(true)
    .SetCacheRegion("foobar")
    .Select(x => new Baz(x.Foo, x.Bar))
    .ToList();

これは、キャッシュがオフになっている場合に機能しますが、キャッシュが有効になっていると、次の例外が発生します。

System.InvalidCastException: タイプ 'Baz' のオブジェクトをタイプ 'System.Object[]' にキャストできません。

残りのスタック トレースは次のとおりです。

at NHibernate.Cache.StandardQueryCache.Put(QueryKey key, ICacheAssembler[] returnTypes, IList result, Boolean isNaturalKeyLookup, ISessionImplementor session)
at NHibernate.Loader.Loader.PutResultInQueryCache(ISessionImplementor session, QueryParameters queryParameters, IType[] resultTypes, IQueryCache queryCache, QueryKey key, IList result)
at NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results) 

これがNHibernateの制限なのか、それとも何か間違っているのか、誰にも分かりますか?

4

1 に答える 1

0

LinqToNHibernate は、データを照会するための完全な実装ではありません。

CriteriaQuery (クエリ可能なすべての約 95% のカバレッジ) または HQL (100% のカバレッジ) を使用します。

于 2009-11-17T14:56:30.737 に答える