Entity Framework Core: DbContextOptionsBuilder enthält keine Definition für 'usedqlserver' und keine Erweiterungsmethode 'usedqlserver'.

150

Ich bin neu in EF Core und versuche, es mit meinem ASP.NET Core-Projekt zum Laufen zu bringen.

Ich erhalte den obigen Fehler in meinem, startup.cswenn ich versuche, das DbContextzu konfigurieren , um eine Verbindungszeichenfolge aus config zu verwenden. Ich folge diesem Tutorial: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Der problematische Code in 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));
        }

Die UseSqlServerMethode wird erkannt, wenn ich sie direkt in den Kontext setze:

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

Alle meine Online-Recherchen deuten auf fehlende Referenzen hin, aber ich kann anscheinend nicht herausfinden, welche mir fehlen ( siehe Bild ).

Maxime Laflamme
quelle
Ebenso findet Intellissense die Methode auch nicht.
Maxime Laflamme

Antworten:

24

Dies ist ein bekanntes Problem im Projektsystem. Siehe dotnet / project-system # 1741

Bricelam
quelle
Vielen Dank, ich habe das Problem umgangen, indem ich zum Core Targeting .net Framework zurückgekehrt bin.
Maxime Laflamme
351

Zuerst installieren wir das Microsoft.EntityFrameworkCore.SqlServer NuGet-Paket:

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Dann nach dem Importieren des Namespace mit

using Microsoft.EntityFrameworkCore;

Wir fügen den Datenbankkontext hinzu:

services.AddDbContext<AspDbContext>(options =>
    options.UseSqlServer(config.GetConnectionString("optimumDB")));
Sieg
quelle
3
Danke für die Antwort, aber das habe ich schon gemacht. Ich fange an zu vermuten, dass in meinem ursprünglichen Projekt etwas beschädigt ist. Ich werde versuchen zu sehen, ob ich von einem neuen Projekt reproduzieren kann ...
Maxime Laflamme
10
Diese Antwort sollte als richtige Antwort markiert werden, nicht die anderen. Der Grund dafür ist, dass die Methode UseSqlServer aus diesem Paket stammt und nicht aus den anderen Paketen.
H35am
107

Hinzufügen using Microsoft.EntityFrameworkCore;

manuell das Problem für mich gelöst

Fand das hier

Bearbeiten...

für dotnet core 3.1 hinzufügen

Microsoft.EntityFrameworkCore.SqlServer

Victor.Uduak
quelle
5
Das ist die Antwort.
smulholland2
Für mich behoben! Irgendwie war es nicht in der Vorschlagsliste Strg +.
Ron Splinter
Es wurde für mich im Jahr 2019 mit .Net Core 2.2
lucamuh
1
Ja, aber ich habe festgestellt, dass das Microsoft.EntityFrameworkCore.SqlServer-Paket für dotnetcore 3.1 benötigt wird. Zuvor schien Microsoft.EntityFrameworkCore allein ausreichend zu sein.
Jeremy Ray Brown
31

Die Installation unter NuGet Package löst Ihr Problem

Microsoft.EntityFrameworkCore.SqlServer

Installationspaket Microsoft.EntityFrameworkCore.SqlServer

Phani K.
quelle
1
Fügen Sie ein wenig mehr Erklärung hinzu, wie dieser einzeilige Befehl das Problem der Operation lösen wird. Insbesondere adressieren Sie hier ein Paket, sodass Sie erklären müssen, wie dieses Paket funktioniert.
Parth Pandya
"DbContextOptionsBuilder.UseSqlServer" ist im Microsoft.EntityFrameworkCore.SqlServer- Paket verfügbar. Sie daher die Referenz hinzu, um das Build-Problem zu lösen.
Phani K
9

Das Paket fehlt. Öffnen Sie die Package Manager-Konsole und führen Sie den folgenden Code aus:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 
Daniel Melo
quelle
9

Folgen Sie den unteren Schritten.

Installieren Sie Entity Framework Core Design und den SQL Server-Datenbankanbieter für Entity Framework Core:

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

Import Entity Framework Core:

using Microsoft.EntityFrameworkCore;

Und konfigurieren Sie Ihren DbContext:

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

Ich habe Visual Studio Code verwendet.

1) Versuchen Sie, das Paket 'Microsoft.EntityFrameworkCore.SqlServer' zu installieren, indem Sie die Versionsnummer angeben.

VS-Code :

'dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Visual Studio: -

'Installationspaket Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Verweisen Sie auf den Link ' Paket' Microsoft.EntityFrameworkCore.SqlServer 'ist nicht kompatibel mit' allen 'Frameworks im Projekt ', um dies zu tun.

2) Fügen Sie dann den Namespace ' mit Microsoft.EntityFrameworkCore hinzu. 'manuell in der Datei Startup.cs.

Siehe den folgenden Link https://github.com/aspnet/EntityFramework/issues/7891 .

3) Wenn Sie ein Abhängigkeitsproblem für ' Microsoft.EntityFrameworkCore.SqlServer.Design' erhalten , z. B. "Paket ' Microsoft.EntityFrameworkCore.Design' ist nicht mit 'allen' Frameworks im Projekt kompatibel ", müssen Sie den folgenden Befehl ausführen:

VS-Code: -

dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

Installationspaket Microsoft.EntityFrameworkCore.Design -v 1.1

Krishna
quelle
1
Dieser funktioniert tatsächlich. Dies ist die beste Antwort auf die Frage. Danke @Krishna
penderi
6

Projekt -> ManageNugetPackages -> Durchsuchen -> Suchen Sie nach "Microsoft.EntityFrameworkCore.SqlServer" und installieren oder aktualisieren Sie.

Bugay Sarikaya
quelle
4

Wie in der Antwort von Win mit der höchsten Punktzahl erwähnt, müssen Sie möglicherweise das Microsoft.EntityFrameworkCore.SqlServer NuGet-Paket installieren. Beachten Sie jedoch, dass für diese Frage asp.net core mvc verwendet wird. In der neuesten Version von ASP.NET Core 2.1 hat MS ein sogenanntes Metapaket namens Microsoft.AspNetCore.App aufgenommen

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

Sie können den Verweis darauf sehen, wenn Sie im Lösungs-Explorer mit der rechten Maustaste auf das ASP.NET Core MVC-Projekt klicken und auswählen Edit Project File

Sie sollten dieses Metapaket sehen, wenn der ASP.NET-Kern die using-Anweisung webappt

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

Microsoft.EntityFrameworkCore.SqlServer ist in diesem Metapaket enthalten. In Ihrer Startup.cs müssen Sie möglicherweise nur Folgendes hinzufügen:

using Microsoft.EntityFrameworkCore;

Hevski
quelle
3

Ich glaube, dies kann gelöst werden, indem ein Projektverweis auf Microsoft.EntityFrameworkCore.SqlServer.Design hinzugefügt wird

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer wurde nicht direkt in meinem Projekt installiert, aber das .Design-Paket installiert es trotzdem als Voraussetzung.

Andrew S.
quelle
Die Installation eines unnötigen Pakets, das das erforderliche Projekt als transitive Abhängigkeit einbringt, ist keine Lösung für das Problem.
Smit
Sie gehen davon aus, dass das Paket nicht erforderlich ist, aber mein Projekt wurde behoben, als ich genau das gleiche Problem hatte.
Andrew S
Dieses Paket ist für die aktuelle Frage nicht erforderlich. Es kann für andere Probleme erforderlich sein, aber nicht für dieses.
Smit
Ab heute, 27. Juli, können Sie einfach Microsoft.EntityFrameworkCore.SqlServer - Paket installieren , und es wird das Problem lösen
Danfer
3
Ab heute, dem 5. Februar 2018, müssen Sie noch das Paket Microsoft.EntityFrameworkCore.SqlServer.Design hinzufügen. Dies wurde mithilfe eines ASP.NET Core 2.0.1-Webprojekts beobachtet.
Rus
3

Bei mir trat dieses Problem mit Visual Studio Code auf und ich konnte es mit zwei Schritten beheben:

  1. Manuelles Hinzufügen using Microsoft.EntityFrameworkCore;
  2. Wird dotnet buildim Terminal ausgeführt.
Askar
quelle
3

Überprüfen Sie in Visual Studio den NuGet Package Manager => Pakete für Lösung verwalten , und überprüfen Sie alle diese Pakete, ob sie in Ihrer Lösung installiert wurden oder nicht, wie folgt:

  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

Ich habe die gleichen Probleme gelöst, nachdem überprüft wurde, ob alle oben genannten Pakete installiert wurden.

Wen Qin Yap
quelle
3

zuerst hinzufügen Install-Package Microsoft.EntityFrameworkCore.SqlServer

Fügen Sie als Nächstes Ihre CS-Datei hinzu using Microsoft.EntityFrameworkCore;

Fügen Sie dies schließlich in Ihrem Kern hinzu Startup.cs

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFrameworkSqlServer().AddDbContext<ApplicationContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
        }
Jaydeep Shil
quelle
2

Wenn Sie im Fall von Sqlite mit diesem Problem konfrontiert sind, dann

. Ich denke, dies ist das Problem mit der Version von Sqlite. Ich hatte das gleiche Problem, als ich diese Versionen von SqLite verwendete

Version 2.2.4 :

Geben Sie hier die Bildbeschreibung ein

Nachdem ich die Version hier überprüft hatte,Geben Sie hier die Bildbeschreibung ein änderte ich die Version, dann funktionierte es.

Geben Sie hier die Bildbeschreibung ein

Kein Fehler nach dieser Verwendung

Version 2.1.2 :

Geben Sie hier die Bildbeschreibung ein

TAHA SULTAN TEMURI
quelle
1

Ich habe das einfach umgangen:

In SqlServerDbContextOptionsExtensionsder Klasse in Frage ResolveSqlServerDbContextOptionsExtensions

Dies behebt das Problem, es muss standardmäßig eine Referenz fehlen.

Baz G.
quelle
1

Für alle, die immer noch dieses Problem haben: Verwenden Sie NuGet, um Folgendes zu installieren: Microsoft.EntityFrameworkCore.Proxies

Dieses Problem hängt mit der Verwendung von Castle Proxy mit EFCore zusammen.

Vima91
quelle
1

Wow, so viele Antworten, noch keine erwähnte dieses Microsoft.EntityFrameworkCore.InMemory- Paket!

Fügen Sie den Verweis auf dieses Paket hinzu: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />und Sie sollten bereit sein, loszulegen.

pso
quelle
1

Ich hatte dieses Problem, als ich zu Microsoft.EntityFrameworkCore.SqlServer v3.0.0 und Microsoft.EntityFrameworkCore.Tools v3.0.0 wechselte

Als ich in beiden Bibliotheken wieder auf Version 2.2.6 umgestiegen bin, ist der Fehler behoben. Dies ist eher eine Problemumgehung als eine Lösung, aber Sie werden so lange einsatzbereit sein, bis das Problem behoben ist.

Ian Gibblet
quelle
1

Einfache Möglichkeit, dieses Problem zu beheben

Fehlermeldung:
Geben Sie hier die Bildbeschreibung ein

Lösung:
Installieren von "microsoft.entityframeworkcore.sqlserver" mit NuGet
Geben Sie hier die Bildbeschreibung ein

Fest :
Geben Sie hier die Bildbeschreibung ein

PS: Stellen Sie sicher, dass Sie EF für den Inhalt "using Microsoft.EntityFrameworkCore" verwenden. Geben Sie hier die Bildbeschreibung ein

Willie Cheng
quelle
0

Stellen Sie für asp.net Core Version 2.1 sicher, dass Sie das folgende Paket hinzufügen, um das Problem zu beheben. (Zumindest behebt dies das Problem mit SQLite)

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

Hier ist die Referenz der Dokumentation unter Verwendung von SQLite mit Entity Framework Core. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite

hmota
quelle
0

Ich hatte dieses Problem, anscheinend hatte ich die erforderlichen NuGet-Pakete nicht hinzugefügt, obwohl ich dachte, dass ich dies getan habe. Überprüfen Sie sie nacheinander.

Anfänger
quelle
0

Derzeit arbeitet mit Entity Framework Core 3.1.3. Keine der oben genannten Lösungen hat mein Problem behoben.

Die Installation des Pakets Microsoft.EntityFrameworkCore.Proxies in meinem Projekt hat das Problem jedoch behoben. Jetzt kann ich beim Festlegen meiner DBContext-Optionen auf den Methodenaufruf UseLazyLoadingProxies () zugreifen.

Hoffe das hilft jemandem. Siehe folgenden Artikel:

Lazy Loading im EF Core

Eric Conklin
quelle
0

Installationspaket:

**Microsoft.EntityFrameworkCore.SqlServer**

Fügen Sie dann die Spitze Ihrer Klasse hinzu:

**Microsoft.EntityFrameworkCore;**

Das hat bei mir funktioniert

nh Dalim
quelle
0

Ich musste die Leitung benutzen

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

in der ConfigureServices-Methode in der Datei Startup.cs

Blain Ellis
quelle
0

Das Kopieren des folgenden Codes in die TodoApi.csproj von https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi löste ein ähnliches Problem für mich.

<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 ist möglicherweise übermäßig, enthält jedoch EntityFrameworkCore

kiwi7
quelle
-1

Installieren Sie das NuGet-Paket Microsoft.EntityFrameworkCore.SqlServer, um dieses Problem zu beheben.

Ich verwende Core Version 3.1

Mehedi Hasan
quelle
2
Diese Antwort wurde bereits am 29.03.2017 gegeben. Es ist nicht nötig, es noch einmal zu wiederholen
Thomas Weller