Pour les rapports est plus facile à utiliser généralement des valeurs simples ou DTO spéciale de. Bien sûr, vous pouvez interroger l'entité qui référence toutes les informations, mais pour la mettre dans la liste (par exemple en utilisant la liaison de données), il est plus pratique d'avoir une seule classe qui contient toutes les valeurs.
Pour obtenir des solutions plus spécifiques que les quelques ci-dessous, vous devez nous en dire un peu plus sur votre modèle de domaine. À quoi ressemble le modèle de classe?
Généralement, vous avez au moins trois options pour obtenir des valeurs "simples" à partir de la base de données à l'aide de NHibernate.
Ecrire HQL qui retourne un tableau de valeurs
Par exemple:
select e1.Style, e1.Color, e1.Size, e2.LAQty, e2.MTLQty
from entity1 inner join entity2
where (some condition)
le résultat sera une liste d'objets []. Chaque élément de la liste est une ligne, chaque élément de l'objet [] est une colonne. C'est tout à fait comme sql, mais à un niveau supérieur (vous décrivez la requête au niveau de l'entité) et est indépendant de la base de données.
Ou vous créez un DTO (objet de transfert de données) afin de maintenir une ligne du résultat:
select new ReportDto(e1.Style, e1.Color, e1.Size, e2.LAQty, e2.MTLQty)
from entity1 inner join entity2
where (some condition)
ReportDto besoin de mettre en œuvre un constructeur qui a tous ces arguments. Le résultat est une liste de ReportDto.
Ou vous utilisez CriteriaAPI (recommandé)
session.CreateCriteria(typeof(Entity1), "e1")
.CreateCriteria(typeof(Entity2), "e2")
.Add(/* some condition */)
.Add(Projections.Property("e1.Style", "Style"))
.Add(Projections.Property("e1.Color", "Color"))
.Add(Projections.Property("e1.Size", "Size"))
.Add(Projections.Property("e2.LAQty", "LAQty"))
.Add(Projections.Property("e2.MTLQty", "MTLQty"))
.SetResultTransformer(AliasToBean(typeof(ReportDto)))
.List<ReportDto>();
Le ReportDto doit avoir un proeprty avec le nom de chaque alias "Style", "couleur", etc. La sortie est une liste de ReportDto.
Cela peut sembler une question stupide, mais que voulez-vous dire par « Comment la classe le modèle ressemble? "? Quelle est la différence entre une entité et un DTO? Aussi, je voudrais utiliser un référentiel pour obtenir mes données, correct? Merci beaucoup d'avoir aidé. – vikasde
Désolé, j'ai supposé que vous faites déjà DDD. Le développement piloté par domaine signifie que vous créez d'abord un modèle de classe (le modèle de domaine), ce sont les entités (objets persistants). Vous les mappez à l'aide de NHibernate dans la base de données et définissez donc le modèle de base de données en fonction de vos classes. Il n'est pas DDD d'avoir une base de données avant et de définir des classes en fonction du schéma de la base de données. –
J'essaie de faire DDD, mais je ne comprends pas assez. Maintenant, en fonction de mes besoins, je créerais une classe simple (InventoryReport) et créerais les propriétés nécessaires (Style, Couleur, Taille, MtlQty, LAQty et Status), puis les mapperais via nHibernate à ma vue sql, correct? – vikasde