У меня есть две родственные модели.
public class Offer
{
public long Id { get; set; }
public string OfferCode { get; set; }
public string Description { get; set; }
// more properties
public int ProductId { get; set; }
public virtual Product Product { get; set; }
}
public class Product
{
public long Id { get; set; }
public string Name { get; set; }
// more properties
public virtual ICollection<Offer> Offers { get; set; }
}
Я пытаюсь создать форму MVC с элементом select HTML, в котором Предложения группируются, а продукты и Имена продуктов служат оптгруппами. С этой целью у меня есть модель представления, которую я намереваюсь заполнить сгруппированными предложениями, и у меня есть способ сделать это.
private OfferMessageViewModel PrepareViewModel(OfferMessageViewModel viewModel)
{
var offers = _context.Offers.Include(o => o.Product).ToList()
.GroupBy(o => o.Product.Name).ToList();
foreach (var offerGroup in offers)
{
var optionGroup = new SelectListGroup
{
Name = offerGroup.Key
};
foreach (var offer in offerGroup)
{
viewModel.Offers.Add(
new SelectListItem
{
Value = offer.OfferCode,
Text = offer.Description,
Group = optionGroup
}
);
}
}
return viewModel;
}
Код срабатывает в предложении GroupBy
. o.Product
равно нулю, даже если o.ProductID
содержит значение.
Вызов ToList()
прямо перед GroupBy
не помогает.
Я пытался удалить virtual
модификаторы в свойствах навигации связанных объектов, но ошибка не исчезла.
Установка пакета NuGet Microsoft.EntityFrameworkCore.Proxies
и его изменение и настройка
services.AddDbContext<ApplicationDbContext>(options =>
options.UseLazyLoadingProxies()
.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
также не вызывали ошибку go прочь.
Есть что-то еще, что я пропускаю?
Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: Было предложено, что мой пост может быть решена этим ТАК вопрос . Но я получаю исключение нулевой ссылки даже при явно включенной отложенной загрузке. Я попробовал предложенные решения там, но все еще не повезло.