错误 CS1061:'DbSet<T>'不包含名为'FromSql'的定义,也没有接受类型为'DbSet<T>'的第一个参数的扩展方法'FromSql'。

24

我正在尝试在Mac OS WebAPI上使用ASP.NET Core 2.1调用视图或存储过程。

using System;
using System.Linq;
using Auth.Database;
using Microsoft.EntityFrameworkCore;

public virtual IQueryable<T> ExecuteStoreProcView(string viewProcName)
{
    IQueryable<T> queryResult = _entities.Set<T>().FromSql(viewProcName).AsQueryable();
    return queryResult;
}

出现以下错误:

Error CS1061: 'DbSet'不包含“FromSql”的定义, 没有接受类型为“DbSet”第一个参数的扩展方法“FromSql” 可以找到(您是否缺少使用指令或程序集引用?)(CS1061)

我正在使用Entity Framework在Mac OS上开发webapi。

在下面的链接中研究了一些查询:- Raw SQL Query without DbSet - Entity Framework Core

Raw SQL Query without DbSet - Entity Framework Core

https://forums.asp.net/t/1886501.aspx?System+Data+Entity+DbSet+Entities+User+does+not+contain+a+definition+for+FirstOrDefault+

https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.relationalqueryableextensions.fromsql?view=efcore-2.1

但是无法找到错误的解决方案。请问有人可以告诉我我漏掉了什么吗?


1
你确定 Microsoft.EntityFrameworkCore.Relational.dll 程序集已经添加到你的项目依赖中了吗? - ADreNaLiNe-DJ
是的,谢谢。我漏掉了那个... - San Jaisy
8个回答

25

安装 Microsoft.EntityFrameworkCore.Relational nuget 包,然后在类中添加 using 语句。

使用 Microsoft.EntityFrameworkCore;


11

在最新版本中,Microsoft将此方法重命名为:

FromSqlInterpolated()

https://learn.microsoft.com/en-us/ef/core/querying/raw-sql

因此,您需要查找/替换所有使用.FromSql的代码为.FromSqlInterpolated。尽管上述文档中讨论了动机,但我必须说,新方法名称的长度是不受欢迎的。

其他答案所说的仍然是必要的-您需要安装Nuget包Microsoft.EntityFrameworkCore.Relational,并添加Microsoft.EntityFramework的using语句。


1
FromSqlRaw() - azakgaim

10

自 Umer 回答以来,可能已经发生变化。现在它位于 Microsoft.EntityFrameworkCore 命名空间中。但您需要引用该软件包。

所以...

dotnet add package Microsoft.EntityFrameworkCore.Relational

并加入这行内容...

using Microsoft.EntityFrameworkCore;

8

使用这行代码解决了我的问题:

using Microsoft.EntityFrameworkCore;

2
在Net Core 6中,方法名称已更改为FromSqlRaw
因此,如果您尚未安装以下软件包,则需要安装:
PM > Install-Package Microsoft.EntityFrameworkCore.Relational

同时使用 FromSqlRaw 代替:

using Microsoft.Data.SqlClient; //parameters must come from this namespace and not System.Data.SqlClient

var param1Value= new SqlParameter("Param1", "value1");
context.SomeEntity
       .FromSqlRaw("EXECUTE dbo.StoredProcedureName @Param1", param1Value)
       .ToList();

2
希望这对于上述问题有所帮助,很可能其他人也会遇到同样的问题。我无法在一个独立于Web.Api(MVC项目)的服务项目中访问.FromSql。我能够从Web.Api项目的控制器中访问.FromSql。令我困惑的是,在Web.api项目中没有直接引用Microsoft.EntityFrameworkCore.Relational。Microsoft.EntityFrameworkCore.SqlServer nuget包由EntityFramework项目引用。通过向服务项目添加引用,现在可以使用.FromSql。今天很漫长,但我仍然不知道为什么Web.api可以工作,而服务项目需要直接引用。

-1

我用以下代码解决了这个问题: $ Using System.Linq;


请查看上面的代码:它们已经有了。 - Gert Arnold

-2

在出现错误的文件顶部添加此行。FromSql是一个扩展方法,实现在Microsoft.EntityFrameworkCore.Relational程序集中。

using Microsoft.EntityFrameworkCore.Relational;

Microsoft.EntityFrameworkCore.Relational不是一个命名空间。请参见:https://dev59.com/PaLia4cB1Zd3GeqPn7-H#44654829 - Anthony Griggs

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