【发布时间】: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<patient>的结果集,因此它必须返回该实体上存在的所有列属性名称(尝试SELECT *进行验证)。要仅在之后调用多个字段,您可以使用 LINQ 进行另一个选择。 -
@TetsuyaYamamoto 感谢您的解释。你能看看我的另一个问题here吗?
标签: c# asp.net-mvc sql-server-2012 ef-code-first rawsql