Entity Framework Core: DbContextOptionsBuilder nie zawiera definicji dla „usesqlserver” ani metody rozszerzenia „usesqlserver”

150

Jestem nowy w EF Core i próbuję zmusić go do pracy z moim projektem ASP.NET Core.

Otrzymuję powyższy błąd startup.cspodczas próby skonfigurowania parametrów DbContextpołączenia z config. Śledzę ten samouczek: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Problematyczny kod w 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));
        }

UseSqlServerMetoda jest rozpoznawany, jeśli umieścić go bezpośrednio w kontekście:

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");
        }

Wszystkie moje badania online wskazują na brakujące odniesienia, ale nie mogę się dowiedzieć, którego z nich mi brakuje ( patrz zdjęcie ).

Maxime Laflamme
źródło
To samo, inteligencja też nie znajduje metody.
Maxime Laflamme

Odpowiedzi:

24

Jest to znany problem w systemie projektu. Zobacz dotnet / project-system # 1741

bricelam
źródło
Dzięki, udało mi się obejść problem, wracając do podstawowego środowiska docelowego .net.
Maxime Laflamme
351

Najpierw instalujemy pakiet NuGet Microsoft.EntityFrameworkCore.SqlServer :

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Następnie po zaimportowaniu przestrzeni nazw z

using Microsoft.EntityFrameworkCore;

dodajemy kontekst bazy danych:

services.AddDbContext<AspDbContext>(options =>
    options.UseSqlServer(config.GetConnectionString("optimumDB")));
Zdobyć
źródło
3
Dzięki za odpowiedź, ale już to zrobiłem. Zaczynam podejrzewać, że w moim oryginalnym projekcie coś jest uszkodzone. Spróbuję zobaczyć, czy uda mi się odtworzyć z nowego projektu ...
Maxime Laflamme
10
Ta odpowiedź powinna być oznaczona jako poprawna odpowiedź, a nie pozostałe, ponieważ metoda UseSqlServer pochodzi z tego pakietu, a nie z innych pakietów.
H35 rano
107

dodanie using Microsoft.EntityFrameworkCore;

ręcznie rozwiązał problem za mnie

Znalazłem to tutaj

Edytować...

dla dotnet core 3.1 add

Microsoft.EntityFrameworkCore.SqlServer

Victor.Uduak
źródło
5
To jest odpowiedź.
smulholland2
Naprawiłem to dla mnie! Jakoś nie było tego na liście sugestii ctrl +.
Ron Splinter,
Naprawiono to dla mnie w 2019 z .Net Core 2.2
lucamuh
1
Tak, ale stwierdziłem, że pakiet Microsoft.EntityFrameworkCore.SqlServer był potrzebny do dotnetcore 3.1. Wcześniej wydawało się, że sam Microsoft.EntityFrameworkCore wystarczy.
Jeremy Ray Brown
31

Instalacja poniżej pakietu NuGet rozwiąże Twój problem

Microsoft.EntityFrameworkCore.SqlServer

Zainstaluj pakiet Microsoft.EntityFrameworkCore.SqlServer

Phani K
źródło
1
Dodaj trochę więcej wyjaśnień, w jaki sposób to jedno wierszowe polecenie rozwiąże problem operacji. Konkretnie chodzi o pakiet, więc musisz wyjaśnić, jak ten pakiet działa.
Parth Pandya,
„DbContextOptionsBuilder.UseSqlServer” jest dostępny w pakiecie Microsoft.EntityFrameworkCore.SqlServer , więc należy dodać do niego odniesienie, aby rozwiązać problem z kompilacją.
Phani K
9

Brakuje pakietu. Otwórz konsolę Menedżera pakietów i wykonaj poniższy kod:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 
Daniel Melo
źródło
9

Wykonaj poniższe kroki.

Zainstaluj Entity Framework Core Design i dostawcę bazy danych SQL Server dla Entity Framework Core:

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

Import Entity Framework Core:

using Microsoft.EntityFrameworkCore;

I skonfiguruj swój DbContext:

var connectionString = Configuration.GetConnectionString("myDb");
services.AddDbContext<MyDbContext>(options => 
    options.UseSqlServer(connectionString)
);
Bruno Pereira
źródło
7

Używałem Visual Studio Code.

1) Spróbuj zainstalować pakiet „Microsoft.EntityFrameworkCore.SqlServer”, podając numer wersji.

Kod VS :

„dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1”

Visual Studio: -

„Zainstaluj pakiet Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1”

Skorzystaj z linku „ Pakiet” Microsoft.EntityFrameworkCore.SqlServer ”jest niezgodny ze„ wszystkimi ”strukturami w projekcie , aby to zrobić.

2) Następnie dodaj przestrzeń nazw „ using Microsoft.EntityFrameworkCore; 'ręcznie w pliku Startup.cs.

Skorzystaj z poniższego łącza https://github.com/aspnet/EntityFramework/issues/7891 .

3) Jeśli wystąpi jakikolwiek problem z zależnościami dla „ Microsoft.EntityFrameworkCore.SqlServer.Design” , np. „Pakiet” Microsoft.EntityFrameworkCore.Design ”jest niezgodny ze„ wszystkimi ”frameworkami w projekcie ”, musimy uruchomić poniższe polecenie,

Kod VS: -

dotnet dodaj pakiet Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

Zainstaluj pakiet Microsoft.EntityFrameworkCore.Design -v 1.1

Kryszna
źródło
1
Ten faktycznie działa. To najlepsza odpowiedź na to pytanie. Dzięki @Krishna
penderi
6

Projekt -> ManageNugetPackages -> Przeglądaj -> Wyszukaj „Microsoft.EntityFrameworkCore.SqlServer” i zainstaluj lub zaktualizuj.

Bugay Sarikaya
źródło
4

Jak wspomniano w odpowiedzi udzielonej przez Win, która uzyskała najwyższą punktację, może być konieczne zainstalowanie pakietu Microsoft.EntityFrameworkCore.SqlServer NuGet, ale należy pamiętać, że to pytanie dotyczy asp.net core mvc. W najnowszym ASP.NET Core 2.1 MS zawarło tak zwany metapakiet o nazwie Microsoft.AspNetCore.App

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

Możesz zobaczyć odwołanie do niego, klikając prawym przyciskiem myszy projekt ASP.NET Core MVC w eksploratorze rozwiązań i wybierając Edit Project File

Powinieneś zobaczyć ten metapakiet, jeśli ASP.NET core webapps the using instrukcję

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

Ten metapakiet zawiera Microsoft.EntityFrameworkCore.SqlServer. Dlatego w swoim Startup.cs może być konieczne dodanie tylko:

using Microsoft.EntityFrameworkCore;

Hevski
źródło
3

Uważam, że można to rozwiązać, dodając odwołanie do projektu do Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer nie został bezpośrednio zainstalowany w moim projekcie, ale pakiet .Design i tak zainstaluje go jako warunek wstępny.

Andrew S.
źródło
Zainstalowanie niepotrzebnego pakietu, który wprowadza wymagany projekt jako zależność przechodnią, nie jest rozwiązaniem problemu.
Smit
Zakładasz, że pakiet jest niepotrzebny, ale naprawił mój projekt, gdy miałem dokładnie ten sam problem.
Andrew S
Ten pakiet jest niepotrzebny w obecnym pytaniu. Może to być wymagane w przypadku innego problemu, ale nie w tym.
Smit
Od dziś, 27 lipca, możesz zainstalować tylko pakiet Microsoft.EntityFrameworkCore.SqlServer i rozwiąże problem
danfer
3
Na dzień dzisiejszy, 5 lutego 2018 r., Nadal musisz dodać pakiet Microsoft.EntityFrameworkCore.SqlServer.Design. Zaobserwowano to przy użyciu projektu sieci Web ASP.NET Core 2.0.1.
Rus
3

U mnie ten problem wystąpił z Visual Studio Code i udało mi się to naprawić w 2 krokach:

  1. Dodawanie ręczne using Microsoft.EntityFrameworkCore;
  2. Działa dotnet buildw terminalu.
Askar
źródło
3

W programie Visual Studio sprawdź Menedżera pakietów NuGet => Zarządzaj pakietami w poszukiwaniu rozwiązania , sprawdź wszystkie te pakiety, czy zostały zainstalowane w Twoim rozwiązaniu, czy nie, jak poniżej:

  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

Rozwiązałem te same problemy po sprawdzeniu, że wszystkie powyższe pakiety zostały zainstalowane.

Wen Qin Yap
źródło
3

najpierw dodaj Install-Package Microsoft.EntityFrameworkCore.SqlServer

następnie dodaj swój plik .cs using Microsoft.EntityFrameworkCore;

na koniec dodaj to do swojego rdzenia Startup.cs

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFrameworkSqlServer().AddDbContext<ApplicationContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
        }
Jaydeep Shil
źródło
2

Jeśli masz do czynienia z tym problemem w przypadku Sqlite, to

. Myślę, że to jest problem z wersją Sqlite, miałem ten sam problem podczas korzystania z tej wersji SqLite

Wersja 2.2.4 :

wprowadź opis obrazu tutaj

Po sprawdzeniu wersji tutaj wprowadź opis obrazu tutaj zmieniłem wersję i zadziałało.

wprowadź opis obrazu tutaj

Po użyciu tego nie ma błędu

Wersja 2.1.2 :

wprowadź opis obrazu tutaj

TAHA SULTAN TEMURI
źródło
1

Obejrzałem to po prostu:

Dodaj SqlServerDbContextOptionsExtensionsdo danej klasy RozwiążSqlServerDbContextOptionsExtensions

To rozwiązuje problem, domyślnie musi brakować jakiegoś odniesienia.

Baz G
źródło
1

Dla każdego, kto nadal ma ten problem: użyj NuGet, aby zainstalować: Microsoft.EntityFrameworkCore.Proxies

Ten problem jest związany z używaniem Castle Proxy z EFCore.

Vima91
źródło
1

Wow, tak wiele odpowiedzi, ale żadna nie wspomniała o tym pakiecie Microsoft.EntityFrameworkCore.InMemory !

Dodaj odniesienie do tego pakietu: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />i powinieneś być gotowy.

pso
źródło
1

Miałem ten problem, kiedy przeniosłem się do Microsoft.EntityFrameworkCore.SqlServer v3.0.0 i Microsoft.EntityFrameworkCore.Tools v3.0.0

Kiedy w obu bibliotekach wróciłem do wersji 2.2.6, błąd zniknął. Jest to raczej obejście niż rozwiązanie, ale pozwoli Ci zacząć działać, dopóki problem nie zostanie rozwiązany.

Ian Gibblet
źródło
1

Łatwy sposób na rozwiązanie tego problemu

Komunikat o błędzie:
wprowadź opis obrazu tutaj

Rozwiązanie:
zainstaluj „microsoft.entityframeworkcore.sqlserver” z NuGet
wprowadź opis obrazu tutaj

Naprawiony :
wprowadź opis obrazu tutaj

PS: upewnij się, że korzystasz z EF na zawartości "using Microsoft.EntityFrameworkCore;" wprowadź opis obrazu tutaj

Willie Cheng
źródło
0

W przypadku asp.net core w wersji 2.1 upewnij się, że dodano następujący pakiet, aby rozwiązać problem. (Przynajmniej to rozwiązuje problem za pomocą SQLite)

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

Oto odniesienie do dokumentacji używającej SQLite z rdzeniem struktury encji. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite

hmota
źródło
0

Miałem ten problem, wygląda na to, że nie dodałem wymaganych pakietów NuGet, chociaż myślałem, że to zrobiłem, sprawdź je jeden po drugim.

Nowicjusz
źródło
0

Obecnie pracuję z Entity Framework Core 3.1.3. Żadne z powyższych rozwiązań nie rozwiązało mojego problemu.

Jednak zainstalowanie pakietu Microsoft.EntityFrameworkCore.Proxies w moim projekcie rozwiązało problem. Teraz mogę uzyskać dostęp do wywołania metody UseLazyLoadingProxies () podczas ustawiania opcji DBContext.

Mam nadzieję, że to komuś pomoże. Zobacz następujący artykuł:

Leniwe ładowanie w EF Core

Eric Conklin
źródło
0

Pakiet instalacyjny:

**Microsoft.EntityFrameworkCore.SqlServer**

następnie dodaj szczyt swojej klasy:

**Microsoft.EntityFrameworkCore;**

to zadziałało dla mnie

nh Dalim
źródło
0

Musiałem skorzystać z linii

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

w metodzie ConfigureServices w pliku Startup.cs

Blain Ellis
źródło
0

Skopiowanie następującego kodu do TodoApi.csproj z https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi rozwiązało podobny problem.

<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 może być nadmierny, ale zawiera EntityFrameworkCore

kiwi7
źródło
-1

Zainstaluj pakiet NuGet, Microsoft.EntityFrameworkCore.SqlServeraby rozwiązać ten problem.

Używam wersji podstawowej 3.1

Mehedi Hasan
źródło
2
Ta odpowiedź została już udzielona 29.03.2017. Nie ma potrzeby tego powtarzać
Thomas Weller