Неожиданное поведение в запросе linq с отложенной загрузкой на ravendb - PullRequest
2 голосов
/ 19 августа 2011

У меня была проблема со следующим кодом. Когда я не вызываю ToList() при первоначальном вызове RavenSession.Query<Item>(), свойство PhotoPath является нулевым в объекте ItemSummaryModel. Это ленивая проблема с загрузкой или что-то еще, что вызывает это?

Свойство PhotoPath было нулевым при первоначальном сохранении этого документа. Затем я обновил его в последующем редактировании.

Когда я запрашиваю полный элемент вместо выбора нового объекта, он работает, как и ожидалось, заполняя все свойства.

Почему я должен был принудительно выполнить запрос с 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 Ответ

1 голос
/ 20 августа 2011

Поставщик RavenDB для linq довольно прост, в настоящее время он не может обрабатывать переназначение полей.Другими словами, он не может справиться с этим, если вы сделали это:

                     PhotoPath = i.ListingPhotoPath,

Если вы изменили его на

                     ListingPhotoPath = i.ListingPhotoPath,

Это будет работать.Это проблема, которую планируется исправить

...