Запрос NHibernate, возвращающий не отображенный объект с использованием Criteria-api - PullRequest
1 голос
/ 26 февраля 2011

Я хочу сделать запрос к сопоставленному классу nhibernate, но результатом должен быть не отображенный объект.Сопоставленные и неотображенные классы выглядят так:

[Class(NameType = typeof(ClassA)]
public class ClassA
{
    [Cache(0, Usage = CacheUsage.ReadWrite)]
    [Id(1, Name = "Id", UnsavedValue = null)]
    [Generator(2, Class = "native")]
    public virtual long? Id { get; set; }

    [Property]
    public virtual string PropertyA { get; set; }

    [Property]
    public virtual string PropertyB { get; set; }

}

public class ClassB
{
    public string PropertyA { get; set; }

    public string PropertyB { get; set; }

    public int Number { get; set; }
}

И я использую этот метод, чтобы получить желаемый результат:

public ICollection<ClassB> Group()
{
    var result =
        Session.CreateCriteria(typeof(ClassA)).SetProjection(
            Projections.ProjectionList().Add(Projections.RowCount(), "Number")
                   .Add(Projections.GroupProperty("PropertyA"))
                   .Add(Projections.GroupProperty("PropertyB")));

    return
        (result.List().Cast<IList>().Select(
            entry =>
            new ClassB {
                        Number = (int)entry[0],
                        PropertyA = (string)entry[1],
                        PropertyB = (string)entry[2] 
                    }
             )).ToList();
}

Это прекрасно работает, но не болеепрямой способ сделать это с помощью критерия-API?

1 Ответ

7 голосов
/ 26 февраля 2011

Да, просто сделайте

result.SetResultTransformer(Transformers.AliasToBean<ClassB>());
result.List<ClassB>();

Вам также нужно будет обернуть свои прогнозы собственности как Псевдонимы Projections.Alias(Projections.GroupProperty("PropertyA"), "PropertyA")

...