Ядро Entity Framework: DbContextOptionsBuilder не містить визначення для "useqlserver" і не має методу розширення "useqlserver"


150

Я новачок в ядрі EF, і я намагаюся змусити його працювати з моїм проектом ASP.NET Core.

Я отримую вищезгадану помилку в моєму, startup.csколи намагаюся налаштувати DbContextвикористовувати рядок з'єднання від config. Я дотримуюся цього підручника: 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 також не знаходить методу.
Максим Лафламм

Відповіді:



352

Спочатку встановлюємо пакет Microsoft.EntityFrameworkCore.SqlServer NuGet:

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Потім, після імпорту простору імен з

using Microsoft.EntityFrameworkCore;

ми додаємо контекст бази даних:

services.AddDbContext<AspDbContext>(options =>
    options.UseSqlServer(config.GetConnectionString("optimumDB")));

3
Дякую за відповідь, але я вже це зробив. Я починаю підозрювати, що щось пошкоджено в моєму первісному проекті. Я спробую побачити, чи зможу я відтворити новий проект ...
Maxime Laflamme

10
Цю відповідь слід позначати як правильну відповідь, а не інші, причина полягає в тому, що метод UseSqlServer є з цього пакета, а не з інших пакетів.
H35am

107

додавання using Microsoft.EntityFrameworkCore;

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

Знайшли це тут

Редагувати ...

для ядра dotnet 3.1 додати

Microsoft.EntityFrameworkCore.SqlServer


5
Це відповідь.
smulholland2

Виправлено це для мене! Якось його не було в списку пропозицій ctrl +.
Рон Сплінтер

Виправлено це для мене в 2019 році .Net Core 2.2
lucamuh

1
Так, але я виявив, що пакет Microsoft.EntityFrameworkCore.SqlServer був потрібний для dotnetcore 3.1. До цього з'ясувалося, що лише Microsoft.EntityFrameworkCore було достатньо.
Джеремі Рей Браун

31

Встановити нижче пакет NuGet вирішить вашу проблему

Microsoft.EntityFrameworkCore.SqlServer

Встановити-пакет Microsoft.EntityFrameworkCore.SqlServer


1
Додайте трохи більше пояснень про те, як ця команда одного рядка вирішить проблему оп. Зокрема, тут ви звертаєтесь до пакету, тому вам потрібно пояснити, як він працює.
Parth Pandya

"DbContextOptionsBuilder.UseSqlServer" доступний у пакеті Microsoft.EntityFrameworkCore.SqlServer , тому для вирішення проблеми збірки потрібно додати посилання на нього.
Phani K

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

Ядро імпортної сутності:

using Microsoft.EntityFrameworkCore;

І налаштуйте свій DbContext:

var connectionString = Configuration.GetConnectionString("myDb");
services.AddDbContext<MyDbContext>(options => 
    options.UseSqlServer(connectionString)
);

7

Я використовував Visual Studio Code.

1) Спробуйте встановити пакет "Microsoft.EntityFrameworkCore.SqlServer", вказавши номер версії.

Код VS :

'пакет додавання донетних мереж Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Візуальна студія: -

'Встановити-пакет Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Для цього перейдіть за посиланням " Пакет" Microsoft.EntityFrameworkCore.SqlServer "несумісний із" усіма "рамками проекту ".

2) Потім додайте простір імен ' за допомогою Microsoft.EntityFrameworkCore; 'вручну у файлі Startup.cs.

Перейдіть за посиланням нижче https://github.com/aspnet/EntityFramework/isissue/7891 .

3) Якщо у вас виникли проблеми із залежністю для " Microsoft.EntityFrameworkCore.SqlServer.Design" , наприклад "Пакет" Microsoft.EntityFrameworkCore.Design "несумісний із" усіма "рамками проекту ", нам потрібно запустити команду нижче,

Код VS: -

dotnet add пакет Microsoft.EntityFrameworkCore.Design -v 1.1

Візуальна студія

Встановлення-пакет Microsoft.EntityFrameworkCore.Design -v 1.1


1
Цей насправді працює. Це найкраща відповідь на запитання. Дякуємо @Krishna
penderi

6

Проект -> ManageNugetPackages -> Огляд -> Пошук "Microsoft.EntityFrameworkCore.SqlServer" та встановлення або оновлення.


4

Як згадується у відповіді на найкращу оцінку за програмою Win, можливо, вам доведеться встановити пакет Microsoft.EntityFrameworkCore.SqlServer NuGet, але зауважте, що для цього питання використовується основний mvc asp.net. В останню версію 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 відбиває оператор використання

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

Microsoft.EntityFrameworkCore.SqlServer включений у цей метапакет. Тож у ваш Startup.cs вам може знадобитися лише додати:

using Microsoft.EntityFrameworkCore;


3

Я вважаю, що це можна вирішити, додавши посилання на проект до Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer не був встановлений безпосередньо в моєму проекті, але пакет .Design все одно встановить його як необхідну умову.


Встановлення непотрібного пакету, який приносить необхідний проект як перехідну залежність, не є вирішенням проблеми.
Smit

Ви вважаєте, що пакунок непотрібний, але він вирішив мій проект, коли у мене була та сама проблема.
Andrew S

Цей пакет непотрібний для поточного питання. Це може знадобитися для іншого випуску, але не для цього.
Smit

На сьогодні, 27 липня, ви можете встановити лише пакет Microsoft.EntityFrameworkCore.SqlServer, і це вирішить проблему
danfer

3
Станом на сьогодні, 5 лютого 2018 року, вам потрібно ще додати пакет Microsoft.EntityFrameworkCore.SqlServer.Design. Це спостерігали за допомогою веб-проекту ASP.NET Core 2.0.1.
Русь

3

Для мене ця проблема трапилася з кодом Visual Studio, і мені вдалося виправити за допомогою 2 кроків:

  1. Додавання вручну using Microsoft.EntityFrameworkCore;
  2. Працює dotnet buildв терміналі.

3

У Visual Studio перевірте NuGet Package Manager => Manage Packages for Solution , перевірте всі ці пакунки, встановлені у вашому рішенні чи ні, як зазначено нижче:

  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.


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

Коли я повернувся до версії v2.2.6 в обох бібліотеках, помилка усунулася. Це скоріше рішення, ніж рішення, але це допоможе вам працювати, поки проблема не буде вирішена.


1

Простий спосіб виправити це питання

Повідомлення про помилку:
введіть тут опис зображення

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

Виправлено:
введіть тут опис зображення

PS: переконайтеся, що ви використовуєте EF у вмісті "за допомогою Microsoft.EntityFrameworkCore;" введіть тут опис зображення


0

Для основної версії 2.1 версії 2.1 не забудьте додати наступний пакет, щоб вирішити проблему. (Принаймні, це виправити проблему за допомогою SQLite)

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

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


0

У мене виникла ця проблема, схоже, що я не додав необхідні пакети NuGet, хоча я вважав, що це зробив, переконайтесь, що перевіряйте їх по черзі.


0

В даний час працює з Entity Framework Core 3.1.3. Жодне з вищезазначених рішень не вирішило мою проблему.

Однак встановлення пакету Microsoft.EntityFrameworkCore.Proxies на моєму проекті вирішила проблему. Тепер я можу отримати доступ до виклику методу UseLazyLoadingProxies () під час встановлення моїх параметрів DBContext.

Сподіваюся, що це комусь допоможе. Дивіться наступну статтю:

Ледаче завантаження в EF Core


0

Встановити-пакет:

**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.Всі можуть бути надмірними, але вони включають EntityFrameworkCore


-1

Встановіть пакет NuGet, Microsoft.EntityFrameworkCore.SqlServerщоб вирішити цю проблему.

Я використовую Core Version 3.1


2
Цю відповідь уже дано 2017-03-29. Не потрібно повторювати це знову
Томас Веллер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.