C# 尝试使用Sql查询在ASP.NET MVC中执行存储过程时发生异常
我正在使用实体框架,但有一个分层数据源。在控制器中进行db查询和转换为json需要很长时间 因此,我有一个存储过程 直接在MicrosoftSQLServerManagementStudio中执行存储过程,我得到了预期的输出 但是尝试在我的控制器中执行以下操作会引发以下异常C# 尝试使用Sql查询在ASP.NET MVC中执行存储过程时发生异常,c#,asp.net-mvc,entity-framework,stored-procedures,for-json,C#,Asp.net Mvc,Entity Framework,Stored Procedures,For Json,我正在使用实体框架,但有一个分层数据源。在控制器中进行db查询和转换为json需要很长时间 因此,我有一个存储过程 直接在MicrosoftSQLServerManagementStudio中执行存储过程,我得到了预期的输出 但是尝试在我的控制器中执行以下操作会引发以下异常 `IEnumerable<MyItem> itemsJson=Context.Database.SqlQuery<MyItem>("Get_JSON_MyItems").ToList();`
`IEnumerable<MyItem> itemsJson=Context.Database.SqlQuery<MyItem>("Get_JSON_MyItems").ToList();`
`IEnumerable itemsJson=Context.Database.SqlQuery(“Get_JSON_MyItems”).ToList()`
System.Data.Entity.Core.EntityCommandExecutionException:'数据
读取器与指定的“MyDataModel.MyItem”不兼容。
类型“Id”的成员在中没有相应的列
具有相同名称的数据读取器。'
我猜数据读取器会将字符串拆分为多个字段,因为它太长了?但我不确定,也不知道如果是这样的话,我该怎么解决
--
(还尝试在控制器中写入命令,而不是执行存储过程)
FOR JSON
将导致查询返回一行和一列,列名称没有意义(基本上是一个包含完整JSON负载的单元格)。例如,它没有Id
列,因此EF不知道如何填充模型
我建议您需要:
用法
,
,那么您需要读取单个JSON元素,然后使用JSON.NET(或类似工具)将其映射到您的列表
例如,可以这样做的一种方法是将存储的proc更改为具有nvarchar(MAX)输出
参数,您可以将该参数设置为查询结果。然后,调用代码可以读取该输出参数
另一种方法是完全绕过实体框架,直接使用ADO.NET。调用,然后使用
SqlDataReader.GetString(0)
获取原始JSON。不是数据/内容问题。物理列架构与模型不匹配。请检查SELECT
查询Get\u JSON\u MyItems
并提供MyItem
类内容,可能Id
列不在其中。请稍候string.Concat
返回带有串联值的新字符串,不能对字符串(必须是集合)使用ToList()
。您应该使用List itemsJson=TabWebContext.Database.SqlQuery(“Get_JSON_MyItems”).ToList()代码>改为。您的意思是MyItemModel.cs属性必须与数据库列@dlatikay绝对一致吗?但是我需要在不存在数据库列的模型中添加属性(以便在某些情况下在控制器中初始化它们)。但是当执行我问题中的查询时,该属性可以为null。MyItem和MyItemModel类是否具有相同的属性?