原始 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<T>
。你有解决这个问题的办法吗?
【问题讨论】:
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 => b.Posts)
您正在加入另一个表
请注意,对于 Entity Framework Core,我必须包含命名空间: using Microsoft.EntityFrameworkCore;
查询DbContext
而不是DeSet
怎么样? @iberodev以上是关于原始 SQL 查询和实体框架核心的主要内容,如果未能解决你的问题,请参考以下文章