Entity Framework Core 3 缺失原始 SQL 方法

15

我正在尝试使用 EF Core 3 来删除表中的所有行,例如:

db.MyTable.ExecuteSqlRaw("delete from MyTable;");

但是我遇到了以下错误:

DbSet' 不包含 'ExecuteSqlRaw' 的定义,且找不到接受类型为 'DbSet' 的第一个参数的可访问扩展方法 'ExecuteSqlRaw'(是否缺少 using 指令或程序集引用?)

EF Core 3 的 Microsoft Breaking Changes 页面没有提供任何关于是否需要特殊包来启用此功能的建议:

https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#fromsql-executesql-and-executesqlasync-have-been-renamed

这些是我安装的 Nuget 包:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Include="System.Linq" Version="4.3.0" />
<PackageReference Include="System.Linq.Expressions" Version="4.3.0" />
<PackageReference Include="System.Linq.Queryable" Version="4.3.0" />

使用语句:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;
注意,FromSqlRaw 可用,但 ExecuteSqlRawExecuteSqlRawAsync 等不可用。 编辑:我添加了一个 using Microsoft.EntityFrameworkCore,错误变为:

'DbSet' 不包含 'ExecuteSqlRaw' 的定义,而最佳的扩展方法重载 'RelationalDatabaseFacadeExtensions.ExecuteSqlRaw(DatabaseFacade, string, params object[])' 要求类型为 'DatabaseFacade' 的接收器

3个回答

15

我的关于新错误的编辑让我找到了答案:

微软的变更文档没有为执行方法提供示例。要让这个方法起作用,你必须通过“Database”属性来完成。简而言之,要使用这些方法:

  1. 确保引入了 using Microsoft.EntityFrameworkCore;
  2. 如果要使用 Execute 方法,请使用 myContext.Database.ExecuteSqlRaw(@"...要执行的SQL语句...")

如何从Context.Database.ExecuteSqlRaw()方法中获取返回值,我找不到答案。 - Seabizkit
1
ExecuteSqlRaw不会给你响应。如果你想要响应,请使用FromSqlRaw(并将myContext.Database更改为myContext.MyTable)。 - Paul A Jungwirth
1
我已经安装了NuGet,但该方法仍然未显示为可用方法。 - cikatomo
谢谢,"using Microsoft.EntityFrameworkCore;" 对我有帮助,现在我可以使用 context.(一些 db set 项).FromSqlRaw ;) - aZtraL-EnForceR

10

我曾遇到过与dbContext.Database.ExecuteSqlRaw()类似的问题,但通过安装Microsoft.EntityFrameworkCore.SqlServer包(甚至没有使用该包)进行修复。

请在当前项目中尝试执行 install-package Microsoft.EntityFrameworkCore.SqlServer .


6

您需要向项目中添加NuGet包引用Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions


4
在.NET 5 (net5.0)中,它是Microsoft.EntityFrameworkCore.Relational。函数名现在是“FromSqlRaw”(在DbSet上)。 - Joerg Krause

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