Ошибка CS1061: «DbSet <T>» не содержит определения для «FromSql» и метода расширения «FromSql», принимающего первый аргумент типа «DbSet <T>»

Я пытаюсь вызвать процедуру просмотра или сохранения с помощью asp.net ядро ​​2.1 на Mac OS Webapi.

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' does not contain a definition for 'FromSql' and no extension method 'FromSql' accepting a first argument of type 'DbSet' could be found (are you missing a using directive or an assembly reference?) (CS1061)

Я разрабатываю webapi с использованием entity framework на mac os.

Изучите некоторые запросы по ссылке ниже: - Необработанный SQL-запрос без DbSet - Entity Framework Core

Необработанный SQL-запрос без 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://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.relationalqueryableextensions.fromsql?view=efcore-2.1

Но найти решение ошибки не удалось. Может ли кто-нибудь, пожалуйста, дайте мне знать, что мне не хватает.

Вы уверены, что сборка Microsoft.EntityFrameworkCore.Relational.dll входит в зависимости вашего проекта?

ADreNaLiNe-DJ 25.06.2018 08:59

да спасибо . . . . . . Мне не хватало этого ...

San Jaisy 25.06.2018 09:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
2
13 269
6

Ответы 6

Добавьте эту строку поверх файла, в котором возникает эта ошибка. FromSql - это метод расширения, реализованный в сборке Microsoft.EntityFrameworkCore.Relational.

using Microsoft.EntityFrameworkCore.Relational;

Microsoft.EntityFrameworkCore.Relational не является пространством имен. См .: stackoverflow.com/a/44654829/1819403

Anthony Griggs 18.02.2021 20:15

Это могло измениться с тех пор, как Умер ответил. Теперь он находится в пространстве имен Microsoft.EntityFrameworkCore. Но вам нужно будет сослаться на пакет.

Так...

dotnet add package Microsoft.EntityFrameworkCore.Relational

И добавьте эту строчку ...

using Microsoft.EntityFrameworkCore;

установите пакет Nuget Microsoft.EntityFrameworkCore.Relational, а затем добавьте оператор using в класс

с использованием Microsoft.EntityFrameworkCore;

Это решило для меня с помощью этой строки:

using Microsoft.EntityFrameworkCore;

В последней версии Microsoft переименовала этот метод в:

FromSqlInterpolated()

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

Поэтому вам придется найти / заменить весь код, используя .FromSql на .FromSqlInterpolated. Они обсуждают мотивацию в приведенном выше документе, хотя я должен сказать, что длина имени нового метода нежелательна.

То, что говорят другие ответы, по-прежнему необходимо - вам необходимо установить пакет Nuget Microsoft.EntityFrameworkCore.Relational и добавить оператор using для Microsoft.EntityFramework.

Надеюсь, это может быть полезно, поскольку связано с вышеуказанной проблемой и, вероятно, у других будет такая же проблема. Мне не удалось получить доступ к .FromSql внутри службы, которая находилась в отдельном проекте службы из Web.Api (проект MVC). Мне удалось получить доступ к .FromSql из контроллера в проекте Web.Api. Что меня смутило, так это то, что в проекте web.api нет прямой ссылки на Microsoft.EntityFrameworkCore.Relational. На пакет Nuget Microsoft.EntityFrameworkCore.SqlServer ссылается проект EntityFramework. Добавив ссылку на сервисный проект, сервисы теперь могут использовать .FromSql. Это был долгий день, но я до сих пор не знаю, почему работает web.api, но проект службы нуждается в прямой ссылке.

Другие вопросы по теме