2017-09-27 125 views
0

我试图与实体框架简单的原始查询写信给我的数据库:原始SQL实体框架

[ResponseType(typeof(Customer))] 
[Route("name/{name}")] 
[HttpGet] 
public List<Customer> GetCustomerName(string name) 
{ 
    //var results = db.Customers.SqlQuery("SELECT Name from dbo.Customer").Where(p => p.Name.Equals(name)).ToList(); 
    var results = db.Customers.SqlQuery("SELECT Name from dbo.Customer WHERE Name = @Name",new SqlParameter("@Name",name)).ToList(); 
    //var results = db.Customers.Where(p => p.Name.Equals(name)); 
    return results; 
} 

最后的实体框架查询工作得很好,但我想要做的原始SQL得到的东西返回简单,因为我从来没有得到原始的SQL与实体框架的工作,我看到所有这些例子,人们说它适用于他们。前2个变种结果不起作用我得到这个错误任何帮助将不胜感激。我是一个Web API 2新手,我只是想了解它

enter image description here

所以说错误的类型AccrRevAcct的成员没有一个相应的列。我不确定这是什么意思AccrRevAcct是我的数据库中的一列,但名称也是如此,我只想要我的客户的名称。

http://localhost:61280/api/Customers/name/1st MIDAMERICA CREDIT UNION 

这是调用我要对我的服务器就像我说的,它返回罚款3日声明,但不是原始的SQL像我想要达到的。我只希望这样做,因为我有一些开发商说,他们不能得到的一切在EF个人工作,我喜欢它,并没有跑进这个问题,我想向他们展示罚款只是下降到原始SQL,但我需要向他们展示我可以让它工作第一大声笑。

回答

2

如果您使用的是你必须返回一个完整实例的DbSetSqlQuery。如果你想重塑数据就像你正在做的,你需要使用的db.DatabaseSqlQuery<T>来代替。

从实例https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx

using (var context = new BloggingContext()) 
{ 
    var blogNames = context.Database.SqlQuery<string>( 
         "SELECT Name FROM dbo.Blogs").ToList(); 
} 
+0

嘿感谢您的答复其实我尝试这样做,我得到一个错误的非泛型方法dbSet .SqlQuery(string.params对象[])不能与类型参数一起使用。 – josh

+0

我试着用ef where语句得到同样的结果,所以我得到了这个错误,两个var结果= db.Customers.SqlQuery (“SELECT Name from dbo.Customer”)。Where(p => p.Name。等于(名称))ToList()。和var结果= db.Customers.SqlQuery (“SELECT Name from dbo.Customer WHERE Name = @Name”,new SqlParameter(“@ Name”,name))。ToList(); – josh

+0

仍然没有 – josh

0

老实说,我认为你正在试图解决错误的问题。最后一个查询是你应该使用的。如果您的开发人员无法让EF工作,那就需要修复。