Ich habe eine Einheit:Nhibernate 2. Ebene Cache mit AliasesToBean Transformator
public class SalesUnit
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
}
und damit verbundene Dto:
public class SalesUnitDto
{
public long Id { get; set; }
public string Name { get; set; }
}
Ich habe eine sehr einfache Abfrage haben:
SalesUnitDto result = null;
var list = _session.QueryOver<SalesUnit>()
.SelectList(l => l
.Select(x => x.Id).WithAlias(() => result.Id)
.Select(x => x.Name).WithAlias(() => result.Name))
.TransformUsing(Transformers.AliasToBean<SalesUnitDto>())
//.Cacheable()
.List<SalesUnitDto>();
Es funktionierte bis ich den Cache der zweiten Ebene eingesteckt habe. Also, wenn ich Cacheable()
Zeile auskommen bekomme ich die Ausnahme:
Nachricht: Wert kann nicht null sein. Parametername: Aliase Stacktrace:
at NHibernate.Transform.AliasedTupleSubsetResultTransformer.IncludeInTransform(String[] aliases, Int32 tupleLength)
at NHibernate.Transform.CacheableResultTransformer.Create(ITupleSubsetResultTransformer transformer, String[] aliases, Boolean[] includeInTuple)
at NHibernate.Loader.Loader.GenerateQueryKey(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results)
Also, was ist daran falsch? Ist es ein Fehler von NHibernate? Ich habe verschiedene Anbieter ohne Erfolg ausprobiert. CacheableResultTransformer wie dies auch habe ich versucht, zu erstellen:
CacheableResultTransformer.Create(Transformers.AliasToBean<SalesUnitDto>(), new[] { "Id", "Name" }, new[] { true, true })
Es kann zurückkehren und Daten-Cache, sondern nur als Tupel (Objekt []). Ich habe es nicht geschafft, Dto zurückzugeben.
Hier ist das Arbeitsbeispiel, ein Problem zu demonstrieren: github
Wie wird 'result' deklariert? –
@Andrew Whitaker, 'Ergebnis' ist' SalesUnitDto' –
Kann nicht reproduzieren - arbeitet mit oder ohne 'Cacheable()'. NH v4.0.4.4000 –