我在ShoppingCart模型中使用了一个计算属性,但是product属性获取了一个空引用并抛出一个空引用错误,如果正确计算TotalWeight属性,请告诉我。
[Key]
public int Id { get; set; }
public int ProductId { get; set; }
public virtual Products Product { get; set; }
[Display(Name = "Quantity")]
public int Quantity { get; set; }
[NotMapped]
public int TotalWeight
{
get
{
return this.Quantity * this.Product.Weight;
}
}
答案 0 :(得分:2)
您应该验证计算属性,因为您确实运行了产品中的weight,product和sub属性为null的可能性。不确定您是否遇到了您想要发生的故障,但这些方面的内容应该纠正。
public int TotalWeight
{
get
{
if(Weight == null || Product?.Weight == null)
return 0;
return Weight * Product.Weight;
}
}
这会纠正您的错误,但您可能会遇到Entity Framework问题。您可能不想使用默认的延迟加载,而是使用预先加载。
急切加载。读取实体时,将检索相关数据 随之而来。这通常会导致单个连接查询 检索所需的所有数据。您指定了预先加载 使用Include和ThenInclude方法实体框架核心。
可以找到一些关于它的例子here。
答案 1 :(得分:-1)
我坚信数量或产品或重量都是空的。
要找出哪一个,请在
行使用断点return this.Quantity * this.Product.Weight;
从那里你会看到哪个变量为空,并且能够一路向上看你应该在哪里初始化有问题的对象。
意外的nullref通常来自另一个未在第一个位置设置的空对象