首页 > 解决方案 > EF Core 3.1.9 - 使用存储过程的 FromRawSql 停止工作 - “底层读取器没有预期的那么多字段。”

问题描述

在某一时刻,使用FromSqlRaw调用存储过程对我有用。我没有更改项目中的任何内容,但现在使用FromSqlRaw返回调用任何存储过程

底层阅读器没有预期的那么多字段

我从项目中删除了模型并执行了 BUILD。然后在没有运气的情况下添加了模型。我减少了模型和存储过程以返回单列,没有运气。

我尝试添加Microsoft.EntityFrameworkCore.Relational为依赖项,没有运气。我所有用于调用存储过程的单元测试都FromSqlRaw返回相同的错误,并且一次它们都有效。

我已收到 Windows 更新,但我不知道这会影响 EF Core。我已经完成了所有我能找到的互联网问题解决方案。我开始认为我需要使用 ADO 作为解决方法,但是当它曾经对我有用时,我不想要解决方法。我的机器上发生了一些变化,但我不确定是什么导致了这个问题。

这是我的测试方法,以防我的代码搞砸了。这是非常直截了当的,不会搞砸的。我绝望地尝试了“var”。

    [TestMethod]
    public void WorkOrderBOMGridABS()
    {
        List<WorkOrderBOMGridABS> baseList = new List<WorkOrderBOMGridABS>();

        using (WorkOrderDataContext context = new WorkOrderDataContext())
        {
            var param = new SqlParameter[] {
                    new SqlParameter() {
                        ParameterName = "@WorkOrderId",
                        SqlDbType =  System.Data.SqlDbType.Int,
                        Direction = System.Data.ParameterDirection.Input,
                        Value = 38385
                    }
            };

            baseList = context.WorkOrderBOMGridABS.FromSqlRaw("[dbo].[WorkOrderBOMGridABS] @WorkOrderId", param).ToList();
            //var results = context.WorkOrderBOMGridABS.FromSqlRaw("[dbo].[WorkOrderBOMGridABS] @WorkOrderId", param).ToList();
            Assert.IsNotNull(baseList);
        }
    }

标签: sql-serverentity-framework-core

解决方案


我正在使用旧表来获取具有整数 ID 值的度量单位值。我将其切换为使用具有 VARCHAR ID 值的新表。对存储的过程和模型代码进行此更改允许 FromRawSql 工作。不知道为什么,因为当整数 ID 值得到一个整数,0 或 0 以外的数字时,它是模型的有效值。我收到的任何错误消息都没有提到这个 UnitId 字段。这很痛苦,但我很高兴它得到了解决。至少在我遇到的下一个错误之前是有保证的。


推荐阅读