2011-08-19 96 views
2

我遇到以下代碼的問題。當我在最初的RavenSession.Query<Item>()呼叫上不呼叫ToList()時,PhotoPath屬性在ItemSummaryModel對象中爲null。這是一個懶加載問題或其他導致這個問題的東西嗎?在ravendb上延遲加載的linq查詢中的意外行爲

PhotoPath此屬性在初始保存時爲null。然後我在後續的編輯中更新它。

當我查詢完整的項目而不是選擇一個新的對象時,它按照預期填充所有屬性。

爲什麼我必須強制執行ToList()的查詢才能按預期填充新的ItemSummaryModel

var fullItems = RavenSession.Query<Item>().ToList(); 
var items = (from i in fullItems 
      where i.DateAdded >= DateTime.Now.Subtract(new TimeSpan(10,0,0,0)) 
      orderby i.DateAdded 
      select new ItemSummaryModel() 
      { 
        Id = i.Id, 
        PhotoPath = i.ListingPhotoPath, 
        MarketingInfo = i.MarketingInfoShort, 
        Name = i.Name, 
        Summary = i.Summary, 
        PriceTypeCode = i.ClearancePrice > 0 ? PriceType.Clearance : (i.SalePrice > 0 ? PriceType.Sale : PriceType.List), 
        ListSaleOrClearancePrice = i.ClearancePrice > 0 ? i.ClearancePrice : (i.SalePrice > 0 ? i.SalePrice : i.Price) 
      }).Take(nbrOfItems); 
return items; 

回答

1

RavenDB的linq提供程序非常簡單,它當前不能處理字段重新映射。 換句話說,它不能處理它,你這樣做:

     PhotoPath = i.ListingPhotoPath, 

如果你把它改成

     ListingPhotoPath = i.ListingPhotoPath, 

它將工作。 這是一個計劃修復的問題