原始 SQL 查询和实体框架核心

Posted

技术标签:

【中文标题】原始 SQL 查询和实体框架核心【英文标题】:Raw SQL queries and Entity Framework Core 【发布时间】: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 的答案。 【参考方案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

以上是关于原始 SQL 查询和实体框架核心的主要内容,如果未能解决你的问题,请参考以下文章

实体框架查询性能与原始 SQL 执行不同

如何使用实体框架执行原始 SQL 查询而无需使用模型?

来自 sql 查询执行实体框架的匿名类型结果

csharp 实体框架核心 - SQL查询控制台日志记录

实体框架核心中等效的 SQL RIGHT 函数

使用原始 SQL 查询绑定复杂模型实体?