2013-07-16 161 views
3

我尝试使用下面的SQL查询来获取数据的前两列从我的数据库摆脱使用SQL查询数据框架并传入行的参数,以便稍后可以通过ajax将其用作加载函数的滚动。但是我得到一个错误,当我站上罚球线:无法在实体框架

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

这是说明该数据读取器与指定模式(我的DB)类型的成员,“机器人不兼容的实体命令执行异常'(这是我打电话后的下一列),在数据阅读器中没有相应的列具有相同的名称。

我该如何才能以可以序列化为json的方式获取前两列?

+1

是否SiteDatas包含机器人列?因为查询不是 –

+0

确实如此,但我不希望它作为结果 – Kayra

+0

您可以在您的选择查询中添加“NULL AS Robots”以将其始终返回为空? –

回答

7

DbSet.SqlQueryDatabase.SqlQuery命令都返回实体实例。你的sql查询必须返回与你的实体相同的列。最有可能的是,您的SiteData类包含一个Robots列,它不存在于您的SQL查询中。

只要指定了返回类型,仍然可以使用Database.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(); 
+0

它的确如此,但我不想要它,有没有办法解决这个问题? – Kayra

+1

是的,Database.SqlQuery可以返回其属性与结果列匹配的任何类型 –

+0

我已经试过这个,并得到错误: 非泛型方法'System.Data.Entity.DbSet .SqlQuery(strin,params object [])不能与类型参数一起使用。 – Kayra