【问题标题】:Raw SQL queries and Entity Framework Core原始 SQL 查询和实体框架核心
【发布时间】:2016-05-20 06:01:55
【问题描述】:

我将我的应用程序迁移到 ASP.NET MVC Core 和 Entity Framework Core,但我发现了问题。我对这样的实体有原始 SQL 查询

var rawSQL = dbContext.Database.SqlQuery<SomeModel>("Raw SQL Query").ToList();

但是context.Database 中没有SqlQuery&lt;T&gt;。你有解决这个问题的办法吗?

【问题讨论】:

  • dbContext 是否正确初始化为Entities
  • @MatchesMalone 是的,正常的 LINQ 查询工作正常
  • 请参阅下面关于如何使用扩展方法来使用参数化(或不使用)SQL 的答案。

标签: c# asp.net-core asp.net-core-mvc entity-framework-core


【解决方案1】:

确保添加using Microsoft.Data.Entity; 因为您可以使用一种扩展方法。

var rawSQL = dbContext.SomeModels.FromSql("your SQL");

更好的是,使用原始 SQL(有 SQL 注入攻击的风险)这个 FromSql 方法允许您使用参数化查询,例如:

dbContext.SomeModels.FromSql("SELECT * FROM dbo.Blogs WHERE Name = @p0", blogName);

【讨论】:

  • 运行良好,但从特定实体模型调用 SQL 查询比一般数据库奇怪。关于注入攻击,我知道并且我正在使用 SQL 参数,但我想在示例中展示简单的问题。谢谢
  • @iberodev 如果你的 sql 查询包含两个表,你会怎么做?
  • @nam 如下所示:docs.efproject.net/en/latest/querying/… 通过添加 .Include(b =&gt; b.Posts) 您正在加入另一个表
  • 请注意,对于 Entity Framework Core,我必须包含命名空间: using Microsoft.EntityFrameworkCore;
  • 查询DbContext而不是DeSet怎么样? @iberodev
猜你喜欢
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多