c# - 如何在 Entity Framework Core 中调试和修复 'Nullable object must have a value'?

标签 c# .net entity-framework-core nullable

我正在用这种方法进行投影:

public async Task<TradeDetail> Get(int tradeId)
{
    var firstOrDefaultAsync = await context.EvgTGTrade
        .Where(x => x.IdTrade == tradeId)
        .Select(trade => new TradeDetail
        {
            Id = trade.IdTrade,
            Code = trade.CdTrade,
            Description = trade.DeTrade,
            Comments = trade.DeComentarios,
            TypeId = trade.IdTipoTrade,
            BrokerId = trade.EvgTGBrokerTrade.FirstOrDefault().IdBroker,
            BillingCycleId = trade.IdCicloFacturacion,
            CounterpartId = trade.IdSujeto,
            StartDate = trade.FhIni,
            EndDate = trade.FhFin,
            SignatureDate = trade.FhFirma,
            Positions = trade.EvgTGPosicion.Select(pos => new Position
            {
                Amount = pos.Cantidad,
                Code = pos.CdPosicion,
                Description = pos.DePosicion,
                LogisticElement = pos.IdElemLogNavigation.DeElemLog,
                StartDate = pos.FhIni,
                EndDate = pos.FhFin,
                FormulaId = pos.IdFormula,
                Operations = pos.EvgTGOperacionCv.Select(op =>
                    new Operation()
                    {
                        TypeId = op.IdTipoOperacion,
                        Fee = op.Fee,
                        Date = op.FhOperacionCv,
                        Price = op.NmPrecio ?? 0,
                        Quantity = op.NmCantidadKwh ?? 0,
                    }),
            })
        })
        .FirstOrDefaultAsync();
    return firstOrDefaultAsync;
}
我在第一行收到一个异常说

Microsoft.EntityFrameworkCore.Query: Error: An exception occurred while iterating over the results of a query for context type 'SampleApp.EF.MyDbContext'. System.InvalidOperationException: Nullable object must have a value.


我检查了异常和堆栈跟踪,但没有说明哪个是有问题的对象。不知道出了什么问题。
那么,有没有一种方法可以知道哪个属性会产生冲突?我确定这是属性列不匹配,但是如果您有很多属性怎么办?相当痛苦!
更新
我已经解决了这个问题。这是由于尝试将 null 分配给我的模型中不可为 null 的属性。
也就是说,这个问题不是关于这个具体的修复,而是关于 找到调试这种情况的通用方法 (这个异常(exception))很常见。恕我直言,异常消息太模糊了。它不提供冲突属性的任何有用信息。

最佳答案

通常,据我所知,它没有更快的方法来找到导致问题的确切字段。

您可以通过以下方式查看您的案例:

1 - 查看您正在执行的查询,并验证它是否正在返回所需的数据。如果它发生得很好,那么查询可能会返回空值,并且您的模型不接受(反之亦然)。

2 - 如果第一项工作正常,请尝试查看您在模型上执行的其他迭代。例如:您正在执行 Positions.Select(),因此请验证仓位以及来自仓位模型的其他内容是否都正常。

3 - 如果您不能百分百确定该领域是什么。只需为您正在执行 linq 的每个字段放置一个可为空类型。示例:BrokerId = trade.EvgTGBrokerTrade.FirstOrDefault().IdBroker,您可以添加问号以确保该字段不会使您的应用程序崩溃。

4 - 查看您在数据库上创建的表,如果它们可以为空,它可能会包含字段的信息。然后,您可以更改代码模型。

这些是我为你推荐的东西

关于c# - 如何在 Entity Framework Core 中调试和修复 'Nullable object must have a value'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59864065/

相关文章:

entity-framework-6 - EF7 是否可以使用?

c# - ToList 和 Find 实现

c# - 如何使用 LINQ 或 XPath 从 XML 中获取打印的值

c# - 在 C# 中捕获网络流量

c# - 如果仅更改内部版本号或修订版号,则定位 GAC 程序集

c# - EF Core 更新现有实体

c# - 身份用户管理器 DeleteAsync DbUpdateConcurrencyException

c# - Mysql 重复键更新查询错误

c# - 禁用错误声音 visual studio 2012

C#如何获取当前目录路径