【问题标题】:Raw SQL with Entity Framework带有实体框架的原始 SQL
【发布时间】:2017-09-27 02:41:40
【问题描述】:

我正在尝试使用 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 以恢复简单,因为我从来没有使用 Entity Framework 获得原始 SQL 工作,我看到所有这些例子,人们说它适用于他们.前 2 个 var 结果不起作用我收到此错误任何帮助将不胜感激。我是 Web API 2 新手,我只是想学习它

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

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

这是我对服务器的调用,就像我说的那样,它在第三条语句中返回正常,但这不是我想要实现的原始 SQL。我只想这样做是因为我有一些开发人员说他们无法让所有东西都在 EF 中运行告诉他们我可以先让它工作,哈哈。

【问题讨论】:

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


    【解决方案1】:

    如果您在DbSet 上使用SqlQuery,您必须返回一个完整的实例。如果你想像你正在做的那样重塑数据,你需要在db.Database 上使用SqlQuery&lt;T&gt;

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

    【讨论】:

    • 嘿,谢谢您的回复我实际上尝试过这个,但我收到一个错误,非泛型方法 dbSet.SqlQuery(string.params object[]) 不能与类型参数一起使用。跨度>
    • 我在使用 ef where 语句尝试这个时得到了同样的结果,所以我在 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();
    • 仍然做同样的事情
    • 您没有正确遵循示例。 db.Database.SqlQuery&lt;string&gt;() 不是 db.Customers.SqlQuery&lt;string&gt;()
    • System.Data.Entity.Core.EntityCommandExecutionException 发生 HResult=0x8013193C 消息=数据读取器与指定的 'SIVAOSModel.Customer' 不兼容。类型的成员“AccrRevAcct”在数据读取器中没有同名的对应列。 Source= StackTrace: 同样的错误这是我的代码 var results = db.Database.SqlQuery("SELECT Name from dbo.Customer WHERE Name = @Name" , new SqlParameter("@Name", name)).ToList();
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 2021-05-15
      • 2016-06-08
      • 2016-05-20
      • 2015-06-16
      相关资源
      最近更新 更多