原始SQL与实体框架

时间:2017-09-27 02:41:40

标签: entity-framework asp.net-web-api2

我正在尝试使用Entity Framework将简单的原始查询写入我的数据库:

[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;
}

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

enter image description here

因此错误表明AccrRevAcct类型的成员没有相应的列。我不确定这意味着什么AccrRevAcct是我数据库中的一列,但Name也是如此,我只想要我的客户名称。

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

这是我对我的服务器的调用,就像我说它在第3个语句中返回正常,但这不是我希望实现的原始SQL。我只想这样做,因为我有一些开发人员说他们无法让所有东西在EF中工作我个人喜欢它并且没有遇到这个问题我想展示它们很好只是放到原始SQL,但我需要告诉他们我可以让它先工作大声笑。

2 个答案:

答案 0 :(得分:2)

如果您在SqlQuery上使用DbSet,则必须返回完整实例。如果您想要重新塑造数据,则需要使用SqlQuery<T>上的db.Database

来自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(); 
}

答案 1 :(得分:0)

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