【问题标题】:Why Entity Framework core does not support raw sql query?为什么实体框架核心不支持原始 sql 查询?
【发布时间】:2019-11-06 10:59:15
【问题描述】:

我在我的 asp.net 应用程序中使用实体框架 6,并使用如下原始查询:

string studentName = ctx.Database.SqlQuery<string>(
         "Select studentname from Student where studentid=1").FirstOrDefault();

现在我正在将我的应用程序移动到 asp.net 核心,但如果不使用 DbSet 类型,我无法找到原始 sql 查询。

var students = context.Students
                  .FromSql("Select * from Students where Name = 'Bill'")
                  .ToList();

但这并不能解决我的解决方案。

是否有开发用于运行 sql 查询的扩展程序?

【问题讨论】:

  • 真正的问题是为什么要使用 EF 来运行原始查询?以这种方式使用 EF 收获甚微。最好使用像 Dapper 这样的微 ORM 并避免开销。或者只使用正确的 LINQ 查询,即context.Students.Where(s=&gt;s.Id=1).Select(s=&gt;s.Name).Take(1)
  • @phuzi,文档说“SQL 查询必须返回实体类型的所有属性的数据。”它说我不能使用原始查询。我的意思是它说我不再使用实体框架了。
  • @PanagiotisKanavos,我有一些与多个表相关的复杂查询。所以我在旧版本中运行这些查询。所以这是一个非常糟糕的情况。开发人员不会将应用程序移至 cere。

标签: entity-framework entity-framework-core


【解决方案1】:

我从official documentation得到以下信息:

DbSet 上的 SqlQuery 方法允许编写将返回实体实例的原始 SQL 查询。返回的对象将由上下文跟踪,就像它们由 LINQ 查询返回时一样。例如:

using (var context = new BloggingContext())
{
    var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}

【讨论】:

    最近更新 更多