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 重大更改页面未就是否需要启用此功能的特殊软件包提供任何建议:
这些是我安装的 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
可用,但 ExecuteSqlRaw
、ExecuteSqlRawAsync
等不可用。
编辑:我加了一个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" 属性 来代替。所以简而言之,使用那些:
- 确保你有
using Microsoft.EntityFrameworkCore;
- 如果使用执行使用
myContext.Database.ExecuteSqlRaw(@"...sql to excxute...")
我在使用 dbContext.Database.ExecuteSqlRaw() 时遇到了类似的问题,并且已通过安装软件包 Microsoft.EntityFrameworkCore.SqlServer 解决了这个问题,甚至没有使用该软件包。
在您当前的项目中尝试 install-package Microsoft.EntityFrameworkCore.SqlServer
。
您需要将 NuGet 包引用 Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions
添加到您的项目。
我正在尝试使用 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 重大更改页面未就是否需要启用此功能的特殊软件包提供任何建议:
这些是我安装的 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
可用,但 ExecuteSqlRaw
、ExecuteSqlRawAsync
等不可用。
编辑:我加了一个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" 属性 来代替。所以简而言之,使用那些:
- 确保你有
using Microsoft.EntityFrameworkCore;
- 如果使用执行使用
myContext.Database.ExecuteSqlRaw(@"...sql to excxute...")
我在使用 dbContext.Database.ExecuteSqlRaw() 时遇到了类似的问题,并且已通过安装软件包 Microsoft.EntityFrameworkCore.SqlServer 解决了这个问题,甚至没有使用该软件包。
在您当前的项目中尝试 install-package Microsoft.EntityFrameworkCore.SqlServer
。
您需要将 NuGet 包引用 Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions
添加到您的项目。