在.NET Core上使用EntityFrameworkCore和SQLite执行原始的SQL语句

5

我正在进行一些安全演示,因此需要有意编写不安全的SQL查询。

我关注的环境是.NET Core(不是完整的.NET),所使用的驱动程序是EntityFrameworkCore,数据库类型是SQLite。

使用内置的查找和查询函数的常规连接没有任何问题。但似乎没有函数允许我执行原始SQL语句。

几个在线资源推荐在数据库/上下文中使用.FromSql().SqlQuery()方法,但这两种方法都不存在于.NET Core驱动程序中。

在这种情况下,有没有办法执行原始的SQL查询?


你看过这个文档页面了吗? - radu-matei
你是否添加了必要的using语句?它们是扩展方法。 - ErikEJ
是的。'DbSet<Message>' 不包含 'FromSql' 的定义,也找不到接受类型为 'DbSet<Message>' 的第一个参数的扩展方法 'FromSql'。 - 0x90
FromSql 扩展方法在 Microsoft.EntityFrameworkCore.Relational 程序集中,而 Microsoft.EntityFrameworkCore.Sqlite 依赖于它。因此,如果您安装 sqlite 包,就可以使用 FromSql 扩展方法。我已经测试过了,没有问题。请查看引用选项卡,并检查是否有 Microsoft.EntityFrameworkCore.Sqlite 引用。 - adem caglin
你太棒了 :) 不知何故,NuGet 在我的情况下未能拉取 Microsoft.EntityFrameworkCore.Relational。我手动安装了它,一切正常。如果您可以以答案格式发布覆盖依赖项的答案,我会点赞并接受 (y) - 0x90
显示剩余3条评论
2个回答

2

正如评论中指出的:

检查您的项目引用中是否有 Microsoft.EntityFrameworkCore.Relational(如果使用 sqllite,则应在 Microsoft.EntityFrameworkCore.Sqlite 引用中)。


使用含有 Microsoft.EntityFrameworkCore.RelationalMicrosoft.EntityFrameworkCore.Sqlite6.0.2,但是仍然没有成功。没有任何原始查询的方法存在,您有什么想法吗? - Master DJon

1
您可以使用 Nuget 包:

Microsoft.EntityFrameworkCore.Sqlite

db.Database.ExecuteSqlCommand("YOUR SQLITE SQL COMMAND");

其中db是从DbContext派生的类的实例


如何获取此函数返回的数据?它返回受影响的行数,而不是数据。 - fnc12
1
ExecuteSqlCommand现已过时,请使用ExecuteSqlRaw和ExecuteSqlRawAsync,以及FromSqlRaw。请搜索“ef core breaking changes”。 - A.J.Bauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接