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 ).


To samo, inteligencja też nie znajduje metody.
Maxime Laflamme

Odpowiedzi:



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

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


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


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 

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

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


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.


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;


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.


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.

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.



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

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


1

Obejrzałem to po prostu:

Dodaj SqlServerDbContextOptionsExtensionsdo danej klasy RozwiążSqlServerDbContextOptionsExtensions

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


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.


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.


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.


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


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


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.


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


0

Pakiet instalacyjny:

**Microsoft.EntityFrameworkCore.SqlServer**

następnie dodaj szczyt swojej klasy:

**Microsoft.EntityFrameworkCore;**

to zadziałało dla mnie


0

Musiałem skorzystać z linii

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

w metodzie ConfigureServices w pliku Startup.cs


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


-1

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

Używam wersji podstawowej 3.1


2
Ta odpowiedź została już udzielona 29.03.2017. Nie ma potrzeby tego powtarzać
Thomas Weller
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.