J'ai une situation dans laquelle j'ai 3 tables: StockItem, Office et StockItemPrice. Le prix de chaque StockItem peut être différent pour chaque Office. J'ai créé un schéma avec 2 relations plusieurs-à-un pour lier StockItem et Office. Donc, dans mon objet domaine stockArticle J'ai une propriété:Remplir une propriété non mappée d'un objet de domaine à partir du résultat de la jointure avec Nhibernate
IList<StockItemPrice> Prices;
qui se charge avec le prix de l'article pour chaque bureau. Cela fonctionne bien. Maintenant, j'essaie d'obtenir le prix d'un article pour un seul bureau. J'ai la requête Criteria suivante:
NHibernateSession.CreateCriteria(persistentType)
.Add(Restrictions.Eq("ID", id))
.CreateAlias("Prices", "StockItemPrice")
.Add(Restrictions.Eq("StockItemPrice.Office", office))
.UniqueResult<StockItem>();
Cela semble fonctionner correctement car le SQL qu'il génère est ce que je devrais attendre. Cependant, je ne sais pas si elle remplit StockItem.Prices
avec un seul objet correctement dès que je fais référence à cette propriété NHibernate effectue une charge paresseuse de tous les prix du bureau. En outre, même si elle fonctionne, il se sent vraiment crufty avoir à accéder au prix en utilisant:
mystockitem.Prices[0].Price
Ce que je voudrais vraiment est d'avoir un champ Price
sur l'objet stockArticle et ont le prix de la vente de l'article dans ce domaine par NHibernate.
J'ai essayé d'ajouter .CreateCriteria("Price", "StockItemPrice.Price")
et même avec createAlias, mais je reçois l'erreur
NHibernate.QueryException : could not resolve property: Price of: StockItem
ce qui est logique, je suppose que le prix est pas une propriété mappée.
Comment est-ce que j'ajusterais la requête pour rendre ceci possible?
En règle générale, je n'aurai jamais besoin de montrer les données pour un seul bureau à la fois (c'est une plate-forme de commande en ligne que les bureaux peuvent utiliser). Je suppose que si NHibernate garde les données dans son cache alors ce ne serait pas trop mauvais. Mais je ne voudrais pas ramener toutes les données sur les prix pour tous les bureaux, puis m'y retrouver pour obtenir le prix que je veux chaque fois qu'une page est chargée. –