【问题标题】:Raw Sql - System.Data.Entity.Core.EntityCommandExecutionException' occurred in EntityFramework.SqlServer.dll but was not handled in user code原始 Sql - System.Data.Entity.Core.EntityCommandExecutionException' 发生在 EntityFramework.SqlServer.dll 中,但未在用户代码中处理
【发布时间】:2017-03-22 00:45:40
【问题描述】:

我在下面进行了原始 SQL 查询以仅从表中选择某些字段。

var qry = "SELECT ptitle, pname, paid, pidno, pdob, pgender, ptelh FROM patient where ";
            if (strPatientName != "")
            {
                qry += "name like @name ";
                if (strMRN != "")
                    qry += "&& id like @id ";
            }

var query = db.Database.SqlQuery<patient>
                ((qry), new SqlParameter("@name", "%" + strPatientName + "%"), new SqlParameter("@id", "%" + strMRN + "%")).ToList();

但是当我运行时,它给出了我未包含在查询中的列的错误。

“System.Data.Entity.Core.EntityCommandExecutionException”发生在 EntityFramework.SqlServer.dll 中,但未在用户代码中处理

附加信息:数据读取器与指定的“project.Models.patient”不兼容。类型的成员“nbid”在数据读取器中没有同名的对应列。

【问题讨论】:

  • 似乎 nbid 列是 EF 要求的,作为查询结果集的一部分,但在查询执行后未返回。尝试将该列添加到qry 查询字符串中。
  • @TetsuyaYamamoto 现在是我没有包含在查询中的下一个列,它出现了相同的错误。换句话说,这是否意味着我必须在查询中包含所有列才能使错误消失?问题是,我只想调用几个字段,而不是全部。这可能吗?
  • 我看到您使用patient 实体作为SqlQuery&lt;patient&gt; 的结果集,因此它必须返回该实体上存在的所有列属性名称(尝试SELECT * 进行验证)。要仅在之后调用多个字段,您可以使用 LINQ 进行另一个选择。
  • @TetsuyaYamamoto 感谢您的解释。你能看看我的另一个问题here吗?

标签: c# asp.net-mvc sql-server-2012 ef-code-first rawsql


【解决方案1】:

您正在寻找将部分数据加载到 EF 中。您需要手动将数据加载到 EF。你会发现一个类似的问题已经回答了here

【讨论】:

  • 谢谢。我试试看:)
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
相关资源
最近更新 更多