我有一個情況,我有3個表格:StockItem,Office和StockItemPrice。每個Office的每個StockItem的價格可能不同。從Nhibernate加入結果中填充域對象的未映射屬性
StockItem(
ID
Name
)
Office(
ID
Name
)
StockItemPrice(
ID
StockItemID
OfficeID
Price
)
我已經建立了一個有2個多對一關係的模式來連接StockItem和Office。所以在我的StockItem域對象我有一個屬性:
IList<StockItemPrice> Prices;
它被加載與該項目的價格爲每間辦公室。這工作正常。現在我正在試圖爲一個辦公室購買一件物品的價格。我有以下條件查詢:
NHibernateSession.CreateCriteria(persistentType)
.Add(Restrictions.Eq("ID", id))
.CreateAlias("Prices", "StockItemPrice")
.Add(Restrictions.Eq("StockItemPrice.Office", office))
.UniqueResult<StockItem>();
這似乎工作正常,因爲它生成的SQL是我所期望的。但是,我不知道它是否正確填充StockItem.Prices
,因爲只要我引用屬性NHibernate執行所有辦公室價格的延遲加載。而且,即使它的工作,那感覺真是這些混沌具有通過使用訪問價:
mystockitem.Prices[0].Price
我真的想是有StockItem對象上Price
場,並有項目賣出期權的價格通過NHibernate進入該領域。
我已經嘗試添加.CreateCriteria("Price", "StockItemPrice.Price")
與CreateAlias相同,但我得到的錯誤
NHibernate.QueryException : could not resolve property: Price of: StockItem
這是有道理的我猜的價格是不是對應的屬性。
我將如何調整查詢以使其成爲可能?
通常我只需要一次顯示單個辦公室的數據(其在線訂購平臺辦事處可以從中獲得庫存)。我猜如果NHibernate將數據保存在緩存中,那就不會太糟糕。但我不想爲所有辦公室收回所有價格數據,然後每次頁面加載時重複獲取我想要的價格。 – 2010-06-07 11:32:03