Entity Framework 核心 3 原始 SQL 缺少方法

Entity Framework Core 3 raw SQL missing methods

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

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

但是我得到错误:

DbSet' does not contain a definition for 'ExecuteSqlRaw' and no accessible extension method 'ExecuteSqlRaw' accepting a first argument of type 'DbSet' could be found (are you missing a using directive or an assembly reference?)

Microsoft 的 EF Core 3 重大更改页面未就是否需要启用此功能的特殊软件包提供任何建议:

https://docs.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' does not contain a definition for 'ExecuteSqlRaw' and the best extension method overload 'RelationalDatabaseFacadeExtensions.ExecuteSqlRaw(DatabaseFacade, string, params object[])' requires a receiver of type 'DatabaseFacade'

我对新错误的编辑让我得到了答案:

Microsoft Breaking Changes 文档只是没有提供 Execute 方法的示例。要让它工作,你必须通过 "Database" 属性 来代替。所以简而言之,使用那些:

  1. 确保你有 using Microsoft.EntityFrameworkCore;
  2. 如果使用执行使用 myContext.Database.ExecuteSqlRaw(@"...sql to excxute...")

我在使用 dbContext.Database.ExecuteSqlRaw() 时遇到了类似的问题,并且已通过安装软件包 Microsoft.EntityFrameworkCore.SqlServer 解决了这个问题,甚至没有使用该软件包。

在您当前的项目中尝试 install-package Microsoft.EntityFrameworkCore.SqlServer

您需要将 NuGet 包引用 Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions 添加到您的项目。