projection NHibernate: Comment obtenir un type tapé en utilisant l'API Criteria avec projection

StackOverflow https://stackoverflow.com/questions/2260424

Question

 List<object[]> products = GetSession().CreateCriteria<Product>()
            .SetProjection(Projections.ProjectionList()
                               .Add(Projections.Property("Id"))
                               .Add(Projections.Property("Name"))
                               .Add(Projections.Property("Price"))
             )
             .List();
public class ProductRow
{
     public int Id { get; set; }
     public string Name { get; set; }
     public double Price { get; set; }
}

Comment puis-je obtenir le résultat comme une liste type?

Je vois qu'il ya une Projection.Cast fonction, mais je ne vois pas de documentation sur la façon de l'utiliser.

Était-ce utile?

La solution

Vous pouvez essayer de définir un transformateur de résultat:

var result = GetSession()
    .CreateCriteria<Product>()
    .SetProjection(Projections.ProjectionList()
        .Add(Projections.Property("Id"), "Id")
        .Add(Projections.Property("Name"), "Name")
        .Add(Projections.Property("Price"), "Price")
    )
    .SetResultTransformer(Transformers.AliasToBean<ProductRow>())
    .List<ProductRow>();

Notez l'utilisation des alias pointant vers un nom de propriété d'un ProductRow lors de l'ajout de chaque projection.

Autres conseils

Je n'ai pas été en mesure de trouver une solution à ce problème spécifique. J'ai posté une question similaire il y a quelques jours. (Http://stackoverflow.com/questions/3921457/nhibernate-entity-access-through-projection) Le message d'erreur est becuase NHibernate est à la recherche d'une propriété nommée Catégorie dans votre catégorie de produits. Je suppose qu'il n'y a pas un. Les travaux ony autour J'ai pu trouver jusqu'à présent est d'utiliser un DTO. De plus, en regardant plus profondément dans les générateurs DTO dynamiques et dynamique LINQ to NHibernate en utilisant des arbres d'expression, expressions lambda et un ou ExpressionSelector. Tout cela semble relativement complexe. Je souhaite qu'il y ait une solution simple pour définir des entités dynamiclly, i.e. projection.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top