实体框架核心3原始SQL缺少方法

时间:2019-10-11 19:31:57

标签: c# entity-framework .net-core entity-framework-core ef-core-3.0

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

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

但是我得到了错误:

  

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

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'不包含'ExecuteSqlRaw'的定义,最佳扩展方法重载'RelationalDatabaseFacadeExtensions.ExecuteSqlRaw(DatabaseFacade,string,params object [])'需要类型为'DatabaseFacade'的接收器

3 个答案:

答案 0 :(得分:2)

我在dbContext.Database.ExecuteSqlRaw()中也遇到了类似的问题,并且通过安装软件包Microsoft.EntityFrameworkCore.SqlServer甚至不使用该软件包就已将其修复。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

Microsoft Breaking Changes文档仅不提供Execute方法的示例。为了使它正常工作,您必须改为通过“数据库”属性。简而言之,请使用以下内容:

  1. 确保您拥有routerLink
  2. 如果使用执行,请使用using Microsoft.EntityFrameworkCore;