Базовая структура Entity Framework: DbContextOptionsBuilder не содержит определения для «Useqlserver» и не имеет метода расширения «UseQlserver».

151

Я новичок в ядре EF, и я пытаюсь заставить его работать с моим проектом ASP.NET Core.

Я получаю вышеупомянутую ошибку startup.csпри попытке настроить DbContextиспользование строки подключения из конфигурации. Я следую этому руководству: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Проблемный код в startup.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
using tracV2.models;
using tracV2.data;

namespace tracV2
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            services.AddSingleton<IConfiguration>(Configuration);

            string conn = Configuration.GetConnectionString("optimumDB");

            services.AddDbContext<tracContext>(options => options.usesqlserver(conn));
        }

UseSqlServerМетод признается , если я положил его прямо в контексте:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace tracV2.data
{
    public class tracContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("myrealconnectionstring");
        }

Все мои исследования онлайн указывают на пропущенные ссылки, но я не могу понять, какой из них мне не хватает ( см. Изображение ).

Максим Лафламм
источник
То же самое, intellissense также не находит метод.
Максим Лафламм

Ответы:

24

Это известная проблема в системе проектов. См. Dotnet / project-system # 1741

bricelam
источник
Спасибо, обошли проблему, вернувшись к ядру .net Framework.
Максим Лафламм
352

Сначала мы устанавливаем пакет NuGet для Microsoft.EntityFrameworkCore.SqlServer :

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Затем, после импорта пространства имен с

using Microsoft.EntityFrameworkCore;

добавляем контекст базы данных:

services.AddDbContext<AspDbContext>(options =>
    options.UseSqlServer(config.GetConnectionString("optimumDB")));
Выиграть
источник
3
Спасибо за ответ, но я уже сделал это. Я начинаю подозревать, что что-то повреждено в моем первоначальном проекте. Я постараюсь посмотреть, смогу ли я воспроизвести из нового проекта ...
Максим Лафламм,
10
Этот ответ должен быть помечен как правильный ответ, а не другие, причина в том, что метод UseSqlServer из этого пакета, а не из других пакетов.
H35am
107

добавление using Microsoft.EntityFrameworkCore;

вручную решил проблему для меня

Нашел здесь

Редактировать...

для dotnet core 3.1 добавить

Microsoft.EntityFrameworkCore.SqlServer

Victor.Uduak
источник
5
Это ответ.
smulholland2
Исправил это для меня! Как-то не было в списке предложений Ctrl +.
Рон Сплинтер
Исправлено для меня в 2019 году с .Net Core 2.2
lucamuh
1
Да, но я обнаружил, что для dotnetcore 3.1 необходим пакет Microsoft.EntityFrameworkCore.SqlServer. До этого казалось, что одного Microsoft.EntityFrameworkCore достаточно.
Джереми Рэй Браун
31

Установите ниже пакет NuGet решит вашу проблему

Microsoft.EntityFrameworkCore.SqlServer

Пакет установки Microsoft.EntityFrameworkCore.SqlServer

Фани К
источник
1
Добавьте немного больше объяснений о том, как эта однострочная команда решит проблему операции. В частности, здесь вы обращаетесь к пакету, поэтому вам нужно объяснить, как работает этот пакет.
Парф Пандья
«DbContextOptionsBuilder.UseSqlServer» доступен в пакете Microsoft.EntityFrameworkCore.SqlServer , поэтому необходимо добавить ссылку на него для решения проблемы сборки.
Фани К
9

Пакет отсутствует. Откройте консоль диспетчера пакетов и выполните приведенный ниже код:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 
Даниэль Мело
источник
9

Следуйте инструкциям ниже.

Установите Entity Framework Core Design и поставщик базы данных SQL Server для Entity Framework Core:

dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Импортировать Entity Framework Core:

using Microsoft.EntityFrameworkCore;

И настройте свой DbContext:

var connectionString = Configuration.GetConnectionString("myDb");
services.AddDbContext<MyDbContext>(options => 
    options.UseSqlServer(connectionString)
);
Бруно Перейра
источник
7

Я использовал код Visual Studio.

1) Попробуйте установить пакет Microsoft.EntityFrameworkCore.SqlServer, указав номер версии.

Код VS :

'dotnet добавить пакет Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Visual Studio: -

'Install-Package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Обратитесь к ссылке « Пакет» Microsoft.EntityFrameworkCore.SqlServer «несовместим со« всеми »фреймворками в проекте ».

2) Затем добавьте пространство имен с помощью Microsoft.EntityFrameworkCore;'вручную в файле Startup.cs.

См. Ссылку ниже https://github.com/aspnet/EntityFramework/issues/7891 .

3) Если у вас возникли проблемы с зависимостью для Microsoft.EntityFrameworkCore.SqlServer.Design' , например «Пакет ' Microsoft.EntityFrameworkCore.Design' несовместим со всеми фреймворками в проекте », нам необходимо выполнить следующую команду:

Код VS: -

dotnet добавить пакет Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

Пакет установки Microsoft.EntityFrameworkCore.Design -v 1.1

Кришна
источник
1
Этот на самом деле работает. Это лучший ответ на вопрос. Спасибо @Krishna
penderi
6

Проект -> ManageNugetPackages -> Обзор -> Поиск "Microsoft.EntityFrameworkCore.SqlServer" и установите или обновите.

Бугай Сарикая
источник
4

Как упоминалось в ответе Win с наибольшей оценкой, вам может потребоваться установить пакет Microsoft.EntityFrameworkCore.SqlServer NuGet, но обратите внимание, что этот вопрос использует asp.net core mvc. В последнюю версию ASP.NET Core 2.1 MS включила так называемый метапакет под названием Microsoft.AspNetCore.App

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage-app?view=aspnetcore-2.2

Ссылку на него можно увидеть, если щелкнуть правой кнопкой мыши проект ASP.NET Core MVC в обозревателе решений и выбрать Edit Project File

Вы должны увидеть этот метапакет, если ASP.NET core webapps использует оператор using

<PackageReference Include="Microsoft.AspNetCore.App" />

Microsoft.EntityFrameworkCore.SqlServer включен в этот метапакет. Итак, в вашем Startup.cs вам может потребоваться только добавить:

using Microsoft.EntityFrameworkCore;

Hevski
источник
3

Я считаю, что это можно решить, добавив ссылку на проект в Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer не был установлен непосредственно в моем проекте, но пакет .Design установит его в любом случае в качестве предварительного условия.

Эндрю С
источник
Установка ненужного пакета, который вносит требуемый проект в качестве транзитивной зависимости, не является решением проблемы.
Smit
Вы предполагаете, что пакет не нужен, но он исправил мой проект, когда у меня возникла точно такая же проблема.
Андрей С
Этот пакет не нужен для текущего вопроса. Это может потребоваться для другой проблемы, но не для этой.
Смит
На сегодняшний день, 27 июля, вы можете установить только пакет Microsoft.EntityFrameworkCore.SqlServer, и он решит проблему
17
3
На сегодняшний день, 5 февраля 2018 г., вам все еще нужно добавить пакет Microsoft.EntityFrameworkCore.SqlServer.Design. Это наблюдалось с использованием веб-проекта ASP.NET Core 2.0.1.
Русь
3

Для меня эта проблема возникла с кодом Visual Studio, и я смог исправить с помощью двух шагов:

  1. Добавление вручную using Microsoft.EntityFrameworkCore;
  2. Бег dotnet buildв терминале.
Аскар
источник
3

В Visual Studio проверьте Диспетчер пакетов NuGet => Управление пакетами для решения , проверьте все эти пакеты, независимо от того, установлены они в вашем решении или нет, как показано ниже:

  1. EntityFrameworkCore
  2. Microsoft.EntityFrameworkCore
  3. Microsoft.EntityFrameworkCore.InMemory
  4. Microsoft.EntityFrameworkCore.Relational
  5. Microsoft.EntityFrameworkCore.Sqlite.Core
  6. Microsoft.EntityFrameworkCore.SqlServer
  7. Microsoft.EntityFrameworkCore.Tools

Я решил те же проблемы после того, как проверил, что все вышеупомянутые пакеты были установлены.

Вэнь Цинь Яп
источник
3

первое добавление Install-Package Microsoft.EntityFrameworkCore.SqlServer

затем добавьте в свой файл .cs using Microsoft.EntityFrameworkCore;

наконец, добавьте это в свое ядро Startup.cs

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFrameworkSqlServer().AddDbContext<ApplicationContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
        }
Джейдип шил
источник
2

Если вы столкнулись с этой проблемой в случае Sqlite, тогда

, Я думаю, что это проблема с версией Sqlite, у меня была такая же проблема, когда я использовал эти версии SqLite

Версия 2.2.4 :

введите описание изображения здесь

После проверки версии здесь введите описание изображения здесь я изменил версию, и она сработала.

введите описание изображения здесь

Нет ошибок после использования этого

Версия 2.1.2 :

введите описание изображения здесь

ТАХА СУЛТАН ТЕМУРИ
источник
1

Я обошел это просто:

Добавить SqlServerDbContextOptionsExtensions в рассматриваемый класс РазрешитьSqlServerDbContextOptionsExtensions

Это устраняет проблему, по умолчанию должна отсутствовать какая-либо ссылка.

Баз Г
источник
1

Для тех, у кого все еще есть эта проблема: используйте NuGet для установки: Microsoft.EntityFrameworkCore.Proxies

Эта проблема связана с использованием Castle Proxy с EFCore.

Vima91
источник
1

Ничего себе, так много ответов, но никто не упомянул об этом Microsoft.EntityFrameworkCore.InMemory пакет !

Добавьте ссылку на этот пакет: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />и вам должно быть хорошо идти.

ПСО
источник
1

У меня была эта проблема, когда я перешел на Microsoft.EntityFrameworkCore.SqlServer v3.0.0 и Microsoft.EntityFrameworkCore.Tools v3.0.0

Когда я вернулся к версии 2.2.6 в обеих библиотеках, ошибка исчезла. Это скорее обходной путь, чем решение, но он поможет вам приступить к работе, пока проблема не будет устранена.

Ян Гибблет
источник
1

Простой способ решить эту проблему

Сообщение об ошибке:
введите описание изображения здесь

Решение:
установить "microsoft.entityframeworkcore.sqlserver" с NuGet
введите описание изображения здесь

Исправлена ​​:
введите описание изображения здесь

PS: убедитесь, что вы используете EF для содержимого «using Microsoft.EntityFrameworkCore;» введите описание изображения здесь

Вилли Ченг
источник
0

Для asp.net core версии 2.1 обязательно добавьте следующий пакет, чтобы решить проблему. (По крайней мере, это решит проблему с использованием SQLite)

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design

Вот ссылка на документацию, использующую SQLite с ядром Entity Framework. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite

hmota
источник
0

У меня была эта проблема, кажется, я не добавил необходимые пакеты NuGet, хотя я думал, что сделал это, обязательно проверьте их один за другим.

Новичек
источник
0

В настоящее время работает с Entity Framework Core 3.1.3. Ни одно из вышеуказанных решений не устранило мою проблему.

Однако установка пакета Microsoft.EntityFrameworkCore.Proxies в моем проекте исправила проблему. Теперь я могу получить доступ к вызову метода UseLazyLoadingProxies () при настройке параметров DBContext.

Надеюсь, это кому-нибудь поможет. Смотрите следующую статью:

Ленивая загрузка в EF Core

Эрик Конклин
источник
0

Install-Package:

**Microsoft.EntityFrameworkCore.SqlServer**

тогда добавьте вершину своего класса:

**Microsoft.EntityFrameworkCore;**

это работает для меня

н далим
источник
0

Я должен был использовать линию

 services.AddEntityFrameworkSqlite().AddDbContext<MovieContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));

в методе ConfigureServices в Startup.cs

Блен Эллис
источник
0

Копирование следующего кода в TodoApi.csproj из https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi решило аналогичную проблему для меня.

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
  </ItemGroup>

</Project>

Microsoft.AspNetCore.All может быть чрезмерным, но включает EntityFrameworkCore

kiwi7
источник
-1

Установить пакет NuGet Microsoft.EntityFrameworkCore.SqlServer чтобы решить эту проблему.

Я использую Core версии 3.1

Мехеди Хасан
источник
2
Этот ответ уже был дан 2017-03-29. Там нет необходимости повторять это снова
Томас Уэллер