Неожиданное поведение в запросе linq с ленивой загрузкой на ravendb
У меня была проблема со следующим кодом. Когда я не вызываю ToList()
на начальном вызове RavenSession.Query<Item>()
, свойство PhotoPath
является нулевым в объекте ItemSummaryModel
. Это проблема с ленивой загрузкой или что-то еще, что вызывает это?
Свойство 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 ответ:
Поставщик linq RavenDB довольно прост, он не может в настоящее время обрабатывать переназначение полей. Другими словами, он не может справиться с тем, что вы сделали это:
PhotoPath = i.ListingPhotoPath,
Если вы изменили его на
ListingPhotoPath = i.ListingPhotoPath,
Это сработает. Это проблема, которую планируется исправить