【问题标题】:The data reader has more than one field. Multiple fields are not valid for EDM primitive types数据阅读器有多个字段。多个字段对 EDM 基本类型无效
【发布时间】:2013-01-25 11:13:25
【问题描述】:

我正在尝试使用 linq 的 ExecuteStoreQuery 这样的方法从表中删除多行

 string query = "delete from IMPORTStatistics where districtid='" + districtId + "'";
 db.ExecuteStoreQuery<int>(query);

但是它抛出了这个异常

"The data reader has more than one field. Multiple fields are not valid for EDM primitive types."

我做错了什么?

仅供参考,我使用的是 MySql。

【问题讨论】:

标签: mysql linq executestorequery


【解决方案1】:

鉴于您正在执行删除命令(而不是查询),我认为您应该使用 ExecuteStoreCommand 而不是 ExecuteStoreQuery

此外,您应该绝对使用参数,而不是直接将 ID 放入命令中。

string command = "delete from IMPORTStatistics where districtid={0}";
int rowsDeleted = db.ExecuteStoreCommand(command, districtId);

【讨论】:

  • 所以参数会在括号 {0} 中,而不是像@DistrictId 这样的数据库变量的一般语法?
  • @PawanNogariya:这是一个更广泛的讨论 - 如果您更详细地研究实体框架,我相信两者都是有效的,但可能在不同的上下文中。 (例如,取决于您是提供 SqlParameters 还是仅提供值。)
  • 嗯..好的。然后我应该详细介绍一下实体框架:) 谢谢!
  • 那么,我们如何捕捉查询的结果呢?我通过 ExecuteStoreCommand 运行存储过程,但无论存储过程返回什么结果都是-1。如果我尝试使用 ExecuteStoreQuery,我会得到同样的错误。
  • @MathieuLeblanc:那么你的存储过程在做什么?听起来可能值得提出一个新问题。
【解决方案2】:

我发现这个链接后发现这个链接真的很有帮助

http://welcometoaspdotnet.blogspot.com/2012/08/execute-stored-procedure-with-entity.html

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2022-08-08
    • 2021-12-14
    • 2019-12-26
    相关资源
    最近更新 更多