sql-server - 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);
}
}
解决方案
我正在使用旧表来获取具有整数 ID 值的度量单位值。我将其切换为使用具有 VARCHAR ID 值的新表。对存储的过程和模型代码进行此更改允许 FromRawSql 工作。不知道为什么,因为当整数 ID 值得到一个整数,0 或 0 以外的数字时,它是模型的有效值。我收到的任何错误消息都没有提到这个 UnitId 字段。这很痛苦,但我很高兴它得到了解决。至少在我遇到的下一个错误之前是有保证的。
推荐阅读
- c++ - 如何使用 Unreal 在 C++ 中解析 JSON 文件中的数组数组
- java - 期待用户的意外
- python - 两条不相交的线之间的夹角
- java - 使用链表实现数组
- docker - 如何在托管的 Ubuntu 代理上启用 Azure Pipelines 中的实验性 Docker 守护程序
- javascript - 两个球按照相同的规则移动,但从不同的位置开始
- sql - SQL中HAVING和WHERE子句的区别
- c# - 数据注释的正则表达式不适用于空字符串
- javascript - 使用 TWIG 的带有 Javascript 变量的 if 语句
- node.js - 在 node.js 模型文件中使用 res.locals