Entity Framework Core: DbContextOptionsBuilder non contiene una definizione per "usiqlserver" e nessun metodo di estensione "usiqlserver"


150

Sono nuovo di EF core e sto cercando di farlo funzionare con il mio progetto ASP.NET Core.

Ricevo l'errore sopra nel mio startup.csquando provo a configurare l' DbContextuso di una stringa di connessione da config. Sto seguendo questo tutorial: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Il codice problematico 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));
        }

Il UseSqlServermetodo è riconosciuto se lo inserisco direttamente nel contesto:

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

Tutte le mie ricerche online indicano riferimenti mancanti, ma non riesco a scoprire quale mi manca ( vedi immagine ).


La stessa cosa, l'intellissense non trova neanche il metodo.
Maxime Laflamme,

Risposte:



352

Innanzitutto installiamo il pacchetto NuGet Microsoft.EntityFrameworkCore.SqlServer :

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Quindi, dopo aver importato lo spazio dei nomi con

using Microsoft.EntityFrameworkCore;

aggiungiamo il contesto del database:

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

3
Grazie per la risposta, ma l'ho già fatto. Sto iniziando a sospettare che qualcosa sia danneggiato nel mio progetto originale. Proverò a vedere se riesco a riprodurre da un nuovo progetto ...
Maxime Laflamme

10
Questa risposta dovrebbe essere contrassegnata come una risposta corretta non le altre, la ragione è che il metodo UseSqlServer proviene da questo pacchetto e non dagli altri pacchetti.
H35

107

aggiungendo using Microsoft.EntityFrameworkCore;

risolto manualmente il problema per me

L'ho trovato qui

Modificare...

per dotnet core 3.1 aggiungere

Microsoft.EntityFrameworkCore.SqlServer


5
Questa è la risposta
smulholland2,

Risolto il problema per me! In qualche modo non era nell'elenco dei suggerimenti ctrl +.
Ron Splinter,

Risolto il problema per me nel 2019 con .Net Core 2.2
lucamuh

1
Sì, ma ho scoperto che il pacchetto Microsoft.EntityFrameworkCore.SqlServer era necessario per dotnetcore 3.1. Prima di questo, sembrava che Microsoft.EntityFrameworkCore da solo fosse abbastanza.
Jeremy Ray Brown il

31

Installa sotto il pacchetto NuGet risolverà il tuo problema

Microsoft.EntityFrameworkCore.SqlServer

Pacchetto di installazione Microsoft.EntityFrameworkCore.SqlServer


1
Aggiungi un po 'più di spiegazione su come questo comando a una riga risolverà il problema dell'operazione. In particolare, qui stai indirizzando un pacchetto, quindi devi spiegare come funziona quel pacchetto.
Parth Pandya,

"DbContextOptionsBuilder.UseSqlServer" è disponibile nel pacchetto Microsoft.EntityFrameworkCore.SqlServer , quindi è necessario aggiungere il riferimento per risolverlo.
Phani K,

9

Manca il pacchetto. Apri la console di Package Manager ed esegui il codice seguente:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 

9

Seguire i passaggi seguenti.

Installa Entity Framework Core Design e il provider di database SQL Server per Entity Framework Core:

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

Import Entity Framework Core:

using Microsoft.EntityFrameworkCore;

E configura il tuo DbContext:

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

7

Stavo usando Visual Studio Code.

1) Prova a installare il pacchetto "Microsoft.EntityFrameworkCore.SqlServer" specificando il numero di versione.

Codice VS :

'dotnet aggiungi pacchetto Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Visual Studio: -

"Installa pacchetto Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1"

Fare riferimento al collegamento ' Pacchetto' Microsoft.EntityFrameworkCore.SqlServer 'non è compatibile con' tutti i framework nel progetto 'per farlo.

2) Quindi aggiungere lo spazio dei nomi ' using Microsoft.EntityFrameworkCore; 'manualmente nel file Startup.cs.

Fare riferimento al seguente link https://github.com/aspnet/EntityFramework/issues/7891 .

3) Se riscontri problemi di dipendenza per " Microsoft.EntityFrameworkCore.SqlServer.Design" , come "Pacchetto" Microsoft.EntityFrameworkCore.Design "non è compatibile con" all "framework nel progetto ", dobbiamo eseguire il comando seguente,

Codice VS: -

dotnet aggiungi pacchetto Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

Pacchetto di installazione Microsoft.EntityFrameworkCore.Design -v 1.1


1
Questo funziona davvero. Questa è la migliore risposta alla domanda. Grazie @Krishna
penderi il

6

Progetto -> ManageNugetPackages -> Sfoglia -> Cerca "Microsoft.EntityFrameworkCore.SqlServer" e installa o aggiorna.


4

Come indicato dalla risposta con il punteggio più alto di Win, potrebbe essere necessario installare il pacchetto NuGet Microsoft.EntityFrameworkCore.SqlServer, ma si noti che questa domanda utilizza asp.net core mvc. Nell'ultimo ASP.NET Core 2.1, MS ha incluso quello che viene chiamato un metapacchetto chiamato Microsoft.AspNetCore.App

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

È possibile visualizzare il riferimento ad esso se si fa clic con il pulsante destro del mouse sul progetto ASP.NET Core MVC in Esplora soluzioni e si seleziona Edit Project File

Dovresti vedere questo metapacchetto se il core ASP.NET webapps l'istruzione using

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

Microsoft.EntityFrameworkCore.SqlServer è incluso in questo metapacchetto. Quindi nel tuo Startup.cs potresti dover aggiungere solo:

using Microsoft.EntityFrameworkCore;


3

Credo che questo possa essere risolto aggiungendo un riferimento al progetto a Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer non è stato installato direttamente nel mio progetto, ma il pacchetto .Design lo installerà comunque come prerequisito.


Installare un pacchetto non necessario che porta al progetto richiesto come dipendenza transitiva non è una soluzione al problema.
Smit

Supponi che il pacchetto non sia necessario, ma ha risolto il mio progetto quando ho avuto lo stesso identico problema.
Andrew S

Quel pacchetto non è necessario per la domanda attuale. Potrebbe essere necessario per diversi problemi, ma non per questo.
Smit

A partire da oggi, 27 luglio, è possibile installare solo il pacchetto Microsoft.EntityFrameworkCore.SqlServer e risolverà il problema
danfer

3
Ad oggi, 5 febbraio 2018, è ancora necessario aggiungere il pacchetto Microsoft.EntityFrameworkCore.SqlServer.Design. Ciò è stato osservato utilizzando un progetto Web ASP.NET Core 2.0.1.
Rus,

3

Per me questo problema si è verificato con Visual Studio Code e sono stato in grado di risolvere con 2 passaggi:

  1. Aggiunta manuale using Microsoft.EntityFrameworkCore;
  2. In esecuzione dotnet buildnel terminale.

3

In Visual Studio, controlla Gestione pacchetti NuGet => Gestisci pacchetti per soluzione , controlla tutti questi pacchetti, installati o meno nella soluzione, come di seguito:

  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

Ho risolto gli stessi problemi dopo aver verificato che tutti i pacchetti sopra siano stati installati.



3

prima aggiungi Install-Package Microsoft.EntityFrameworkCore.SqlServer

prossimo aggiungi nel tuo file .cs using Microsoft.EntityFrameworkCore;

infine aggiungilo nel tuo core Startup.cs

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

2

Se stai affrontando questo problema in caso di Sqlite, allora

. Penso che questo sia il problema con la versione di Sqlite, ho avuto lo stesso problema quando stavo usando questa versione di Sqlite

Versione 2.2.4 :

inserisci qui la descrizione dell'immagine

Dopo aver controllato la versione qui inserisci qui la descrizione dell'immagine ho cambiato la versione e poi ha funzionato.

inserisci qui la descrizione dell'immagine

Nessun errore dopo aver usato questo

Versione 2.1.2 :

inserisci qui la descrizione dell'immagine


1

Ho aggirato questo semplicemente:

Inserisci SqlServerDbContextOptionsExtensions alla classe in questione RisolviSqlServerDbContextOptionsExtensions

Questo risolve il problema, deve mancare qualche riferimento per impostazione predefinita.


1

Per chiunque abbia ancora questo problema: Usa NuGet per installare: Microsoft.EntityFrameworkCore.Proxies

Questo problema è legato all'uso di Castle Proxy con EFCore.


1

Wow così tante risposte, ma nessuna ha menzionato questo Microsoft.EntityFrameworkCore.InMemory pacchetto !

Aggiungi il riferimento a questo pacchetto: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />e dovresti essere a posto.


1

Ho avuto questo problema quando sono passato a Microsoft.EntityFrameworkCore.SqlServer v3.0.0 e Microsoft.EntityFrameworkCore.Tools v3.0.0

Quando sono tornato alla v2.2.6 su entrambe le librerie, l'errore è scomparso. Questo è più una soluzione alternativa che una soluzione, ma ti metterà in funzione fino a quando il problema non sarà risolto.


1

Modo semplice per risolvere questo problema

Messaggio di errore:
inserisci qui la descrizione dell'immagine

Soluzione:
installare "microsoft.entityframeworkcore.sqlserver" con NuGet
inserisci qui la descrizione dell'immagine

Fisso:
inserisci qui la descrizione dell'immagine

PS: assicurati di aver utilizzato EF sul contenuto "using Microsoft.EntityFrameworkCore;" inserisci qui la descrizione dell'immagine


0

Per asp.net core versione 2.1 assicurati di aggiungere il seguente pacchetto per risolvere il problema. (Almeno questa soluzione risolve il problema utilizzando SQLite)

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

Ecco il riferimento della documentazione utilizzando SQLite con il core del framework di entità. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite


0

Ho avuto questo problema, sembra che non avessi aggiunto i pacchetti NuGet richiesti, anche se pensavo di averlo fatto, assicurati di controllarli uno per uno.


0

Attualmente in collaborazione con Entity Framework Core 3.1.3. Nessuna delle soluzioni di cui sopra ha risolto il mio problema.

Tuttavia, l'installazione del pacchetto Microsoft.EntityFrameworkCore.Proxies sul mio progetto ha risolto il problema. Ora posso accedere alla chiamata del metodo UseLazyLoadingProxies () durante l'impostazione delle opzioni DBContext.

Spero che questo aiuti qualcuno. Vedi il seguente articolo:

Caricamento lento in EF Core


0

Installare-Pacchetto:

**Microsoft.EntityFrameworkCore.SqlServer**

quindi aggiungi il massimo della tua classe:

**Microsoft.EntityFrameworkCore;**

ha funzionato per me


0

Ho dovuto usare la linea

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

nel metodo ConfigureServices in Startup.cs


0

La copia del codice seguente in TodoApi.csproj da https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi ha risolto un problema simile per me.

<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 può essere eccessivo ma include EntityFrameworkCore


-1

Installa il pacchetto NuGet Microsoft.EntityFrameworkCore.SqlServerper risolvere questo problema.

Sto usando Core versione 3.1


2
Questa risposta è stata già fornita il 29-03-2017. Non è necessario ripeterlo di nuovo
Thomas Weller,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.