C# Computed属性返回空引用

C# Computed属性返回空引用,c#,.net-core,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 { ge

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

我坚信无论是数量、产品还是重量都是零

要找出是哪个,请在该行使用断点

return this.Quantity * this.Product.Weight;
从那里,您将看到哪个变量为null,并且可以逐步确定应该在哪里初始化有问题的对象


意外的nullref通常来自一开始未设置的另一个null对象

您应该验证计算的属性,因为您确实在product中运行权重、乘积和子属性为null的可能性。不确定你是否遇到了你希望发生的失败,但是沿着这些路线应该可以纠正

public int TotalWeight 
{
     get
     {
         if(Weight == null || Product?.Weight == null)
              return 0;

         return Weight * Product.Weight;
     }
}
这将纠正您的错误,但您可能会遇到实体框架的问题。您可能不想使用默认的延迟加载,而是使用即时加载

急切的装载。读取实体时,将检索相关数据 和它一起。这通常会导致一个连接查询 检索所需的所有数据。您可以在中指定即时加载 通过使用Include和thenclude方法实现实体框架核心


可以找到它的一些示例。

因为
产品
null
。你在哪里设置它?这与ASP.NET MVC或Core无关,请不要垃圾邮件标签。如果您使用的是Entity Framework Core,则仅当您将
产品
作为查询的一部分,但您没有发布您的查询,也没有发布您正在使用的框架,因此我们只能猜测。请通过“publicstaticvoid”函数从shoppingcart控制器发布一个am传递产品。@user2884954和?此时使用调试器检查其值。假设购物车对象中的weight属性为null,quantity属性为null。其中之一是,你需要找出哪一个。上面的代码并没有提供明确的答案,但调试会。当然,在TotalWeight属性被引用时,您需要检查这一点。在该get中设置断点;方法我个人不喜欢这些方法,如果您的数据模型或域模型不能表示正确的视图数据,请将其转换为正确的表示。不要持有ORM应该忽略的计算属性,它只是杂乱无章,更难分离。这不是答案,充其量只是一个不好的评论。正如我所评论的,OP最有可能用于EF6的延迟加载,并且不希望EF CoreQuantity(和权重最有可能)的延迟加载缺失为int,因此它不能为null。@MBakardzhiev是的,但如果实体框架没有加载模型中的关联对象,则根积很可能为null。如果没有更多信息,则无法验证。@Greg是的,因此这意味着开封者需要急切地加载产品(我99%确定他没有)。@Mbakardziev是的,没错。这就是为什么我在回答的最后提到了这一点。