Неожиданное поведение в запросе 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 2

1 ответ:

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

                     PhotoPath = i.ListingPhotoPath,

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

                     ListingPhotoPath = i.ListingPhotoPath,

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