Вам не нужно DictionaryResultTransformer
, которое DanP отправил. AliasToEntityMapTransformer
делает то же самое, хотя ни один не будет работать самостоятельно.Вы получите словарь сущностей.
Единственный способ, который я нашел, - это проецировать каждое свойство индивидуально.Однако вы не хотите делать это вручную, потому что оно сломается всякий раз, когда вы меняете свое отображение.Решение выглядит примерно так:
var criteria = DetachedCriteria.For<Person>();
criteria.Add(Restrictions.Eq("Id", id));
var projectionList = Projections.ProjectionList();
var metadata = session.SessionFactory.GetClassMetadata(typeof(Person));
foreach (var name in metadata.PropertyNames)
{
projectionList.Add(Projections.Property(name), name);
}
criteria
.SetProjection(projectionList)
.SetResultTransformer(Transformers.AliasToEntityMap);
var result = criteria.GetExecutableCriteria(session)
.UniqueResult<IDictionary>()
В приведенном выше примере я использую запрос для имитации Get
.Конечно, вы можете немного изменить это и вернуть коллекцию;просто позвоните List<T>
вместо UniqueResult<T>
.