【发布时间】:2020-07-04 15:49:18
【问题描述】:
我有两个相关的模型。
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 表单,其中包含一个选择的 HTML 元素,其中对优惠和产品进行分组 并将产品名称用作 optgroup。 为此,我有一个视图模型,我打算用分组的优惠填充它,我有一个方法 这样做。
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 为 null,即使 o.ProductID 中有一个值。
在GroupBy 之前的ToList() 呼叫没有帮助。
我已尝试删除相关实体上的 virtual 修饰符
导航属性,但错误仍然存在。
安装 NuGet 包 Microsoft.EntityFrameworkCore.Proxies 和
像这样修改和配置它
services.AddDbContext<ApplicationDbContext>(options =>
options.UseLazyLoadingProxies()
.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
也没有使错误消失。
我还有什么遗漏的吗?
任何帮助将不胜感激。
编辑: 有人建议我的帖子可能会被这个SO question 解决。但是即使显式打开延迟加载,我也会得到空引用异常。 我在那里尝试了建议的解决方案,但仍然没有运气。
【问题讨论】:
-
@AliK 请原谅我,但我认为 _context.Offers.Include(o => o.Product) 正是这样做的。包括相关产品。还是我错过了什么?
-
尝试使用 _context.Offers.Include("Product") 代替
-
这能回答你的问题吗? Entity Framework Include() is not working
-
@MohammadAli 感谢您的建议,但这些修复对我不起作用。
-
@MohammadAli 我找到了解决方法。将其发布为答案。再次感谢您的建议。
标签: c# asp.net-core entity-framework-core asp.net-core-mvc ef-core-3.1