可以';在实体框架中,不能使用SQL查询来获取数据

本文关键字:SQL 查询 数据 获取 不能 实体 框架 可以 | 更新日期: 2023-09-27 18:22:25

我正试图使用以下SQL查询从数据库中获取前两列数据:

SELECT  Id, DomainUrl
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY Id ) AS RowNum, Id, DomainUrl
          FROM      SiteDatas
        ) AS RowConstrainedResult
WHERE   RowNum >= 1
    AND RowNum <= 10
ORDER BY RowNum

我使用实体框架并为行传递参数,以便以后可以通过ajax将其用作加载时滚动函数。然而,当我到达线路时,我遇到了一个错误:

var stores = db.SiteDatas.SqlQuery(SQL, parameters).ToList();

这是一个实体命令执行异常,说明数据读取器与指定的模型(我的数据库)不兼容。类型为"Robots"的成员(在我调用的列之后的下一列)在数据读取器中没有同名的对应列。

我该如何将前两列序列化为json?

可以';在实体框架中,不能使用SQL查询来获取数据

DbSet.SqlQuery和Database.SqlQuery命令都返回实体实例。sql查询必须返回与实体相同的列。很可能,您的SiteData类包含SQL查询中不存在的Robots列。

您仍然可以使用数据库。SqlQuery<T>返回您的数据,前提是您指定了返回类型。返回类型不必是实体类型,只要具有与结果集相同的列名即可。

假设dbDbContext实例,您可以写:

public class MyResults
{
   public int ID{get;set;}
   public string DomainUrl {get;set;}
}
...
var stores = db.Database.SqlQuery<MyResults>(SQL, parameters).ToList();