让我们说我想选择一个类别中返回的第一个产品,但我需要直接传递一个sql字符串。请注意我是如何指定context.Products.SqlQuery的。我认为即使我没有选择查询中的所有产品字段,这也会有效。我真的必须选择匿名类型然后将其转换为产品吗?
我得到的错误是: 数据阅读器与指定的“AppModel.Product”不兼容。类型为“InsertDate”的成员在数据读取器中没有具有相同名称的相应列。
以下是我的代码:
StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT Id, ProductName ");
sql.AppendLine("FROM Product ");
sql.AppendLine("WHERE CategoryId=@CategoryId ");
var retval = context.Products.SqlQuery(sql.ToString(),
new SqlParameter("@CategoryId", categoryId)).FirstOrDefault();
return retval;
答案 0 :(得分:2)
实体框架无法从SQL语句的结果构造整个Product对象,因为您只返回这两个字段。它可以工作,如果你这样做:
sql.AppendLine("Select * ");
sql.AppendLine("FROM Product ");
...
或者您手动指定了所有字段。