Computed属性返回null引用

时间:2018-03-28 22:54:32

标签: c# .net-core

我在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;
    }
}

2 个答案:

答案 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通常来自另一个未在第一个位置设置的空对象