Entity Framework Core: DbContextOptionsBuilder ne contient pas de définition pour 'usesqlserver' et aucune méthode d'extension 'usesqlserver'


150

Je suis nouveau dans EF Core et j'essaie de le faire fonctionner avec mon projet ASP.NET Core.

J'obtiens l'erreur ci-dessus dans mon startup.csen essayant de configurer le DbContextpour utiliser une chaîne de connexion de config. Je suis ce tutoriel: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Le code problématique dans 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));
        }

La UseSqlServerméthode est reconnue si je la mets directement dans le contexte:

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

Toutes mes recherches en ligne indiquent des références manquantes, mais je n'arrive pas à trouver celle qui me manque ( voir image ).


Même chose, intellissense ne trouve pas non plus la méthode.
Maxime Laflamme

Réponses:



352

Tout d'abord, nous installons le package NuGet Microsoft.EntityFrameworkCore.SqlServer :

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Ensuite, après avoir importé l'espace de noms avec

using Microsoft.EntityFrameworkCore;

nous ajoutons le contexte de la base de données:

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

3
Merci pour la réponse mais je l'ai déjà fait. Je commence à soupçonner que quelque chose est corrompu dans mon projet d'origine. Je vais essayer de voir si je peux reproduire à partir d'un nouveau projet ...
Maxime Laflamme

10
Cette réponse doit être marquée comme bonne réponse et non les autres, la raison en est que la méthode UseSqlServer provient de ce package et non des autres packages.
H35am

107

ajouter using Microsoft.EntityFrameworkCore;

a résolu manuellement le problème pour moi

J'ai trouvé ça ici

Éditer...

pour dotnet core 3.1 ajouter

Microsoft.EntityFrameworkCore.SqlServer


5
Voilà la réponse.
smulholland2

Corrigé pour moi! D'une manière ou d'une autre, ce n'était pas dans la liste de suggestions ctrl +.
Ron Splinter

Je l'ai corrigé pour moi en 2019 avec .Net Core 2.2
lucamuh

1
Oui, mais j'ai trouvé que le package Microsoft.EntityFrameworkCore.SqlServer était nécessaire pour dotnetcore 3.1. Avant cela, il semblait que Microsoft.EntityFrameworkCore à lui seul suffisait.
Jeremy Ray Brown

31

L'installation ci-dessous NuGet Package résoudra votre problème

Microsoft.EntityFrameworkCore.SqlServer

Package d'installation Microsoft.EntityFrameworkCore.SqlServer


1
Ajoutez un peu plus d'explications sur la façon dont cette commande d'une ligne résoudra le problème de l'opération. Plus précisément, vous abordez ici un package, vous devez donc expliquer comment ce package fonctionne.
Parth Pandya

«DbContextOptionsBuilder.UseSqlServer» est disponible dans le package Microsoft.EntityFrameworkCore.SqlServer , il faut donc en ajouter la référence pour résoudre le problème de construction.
Phani K

9

Le paquet est manquant. Ouvrez la console du gestionnaire de package et exécutez le code ci-dessous:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 

9

Suivez les étapes ci-dessous.

Installez Entity Framework Core Design et le fournisseur de base de données SQL Server pour Entity Framework Core:

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

Importer Entity Framework Core:

using Microsoft.EntityFrameworkCore;

Et configurez votre DbContext:

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

7

J'utilisais Visual Studio Code.

1) Essayez d'installer le package «Microsoft.EntityFrameworkCore.SqlServer» en spécifiant le numéro de version.

Code VS :

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

Visual Studio:-

'Install-Package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Reportez-vous au lien ' Package' Microsoft.EntityFrameworkCore.SqlServer 'est incompatible avec' tous 'les frameworks du projet ' pour le faire.

2) Ajoutez ensuite l'espace de noms 'en utilisant Microsoft.EntityFrameworkCore; 'manuellement dans le fichier Startup.cs.

Reportez-vous au lien ci-dessous https://github.com/aspnet/EntityFramework/issues/7891 .

3) Si vous rencontrez un problème de dépendance pour ' Microsoft.EntityFrameworkCore.SqlServer.Design' , comme "Package ' Microsoft.EntityFrameworkCore.Design' est incompatible avec 'tous' les frameworks du projet ", nous devons exécuter la commande ci-dessous,

Code VS: -

dotnet ajouter le package Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

Package d'installation Microsoft.EntityFrameworkCore.Design -v 1.1


1
Celui-ci fonctionne réellement. C'est la meilleure réponse à la question. Merci @Krishna
penderi

6

Projet -> ManageNugetPackages -> Parcourir -> Recherchez "Microsoft.EntityFrameworkCore.SqlServer" et installez ou mettez à jour.


4

Comme mentionné par Win, vous devrez peut-être installer le package NuGet Microsoft.EntityFrameworkCore.SqlServer, mais veuillez noter que cette question utilise asp.net core mvc. Dans le dernier ASP.NET Core 2.1, MS a inclus ce qu'on appelle un métapaquet appelé Microsoft.AspNetCore.App

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

Vous pouvez voir la référence à celui-ci si vous cliquez avec le bouton droit sur le projet ASP.NET Core MVC dans l'explorateur de solutions et sélectionnez Edit Project File

Vous devriez voir ce métapaquet si ASP.NET core webapps l'instruction using

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

Microsoft.EntityFrameworkCore.SqlServer est inclus dans ce métapaquet. Donc, dans votre Startup.cs, vous n'aurez peut-être qu'à ajouter:

using Microsoft.EntityFrameworkCore;


3

Je pense que cela peut être résolu en ajoutant une référence de projet à Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer n'a pas été directement installé dans mon projet, mais le package .Design l'installera quand même comme prérequis.


L'installation d'un package inutile qui apporte le projet requis en tant que dépendance transitive n'est pas une solution au problème.
Smit

Vous supposez que le package n'est pas nécessaire, mais il a résolu mon projet alors que j'avais exactement le même problème.
Andrew S

Ce paquet n'est pas nécessaire pour la question actuelle. Il peut être nécessaire pour un problème différent, mais pas celui-ci.
Smit

À partir d'aujourd'hui, le 27 juillet, vous pouvez installer uniquement le package Microsoft.EntityFrameworkCore.SqlServer et cela résoudra le problème
danfer

3
À compter d'aujourd'hui, le 5 février 2018, vous devez toujours ajouter le package Microsoft.EntityFrameworkCore.SqlServer.Design. Cela a été observé à l'aide d'un projet Web ASP.NET Core 2.0.1.
Rus

3

Pour moi, ce problème s'est produit avec Visual Studio Code et j'ai pu le résoudre en 2 étapes:

  1. Ajout manuel using Microsoft.EntityFrameworkCore;
  2. Fonctionnement dotnet builddans le terminal.

3

Dans Visual Studio, vérifiez le gestionnaire de packages NuGet => Gérer les packages pour la solution , vérifiez tous ces packages, qu'ils soient installés dans votre solution ou non, comme ci-dessous:

  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

J'ai résolu les mêmes problèmes après avoir vérifié que tous les packages ci-dessus ont été installés.



3

ajouter d'abord Install-Package Microsoft.EntityFrameworkCore.SqlServer

ajout suivant dans votre fichier .cs using Microsoft.EntityFrameworkCore;

enfin ajoutez ceci dans votre cœur Startup.cs

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

2

Si vous rencontrez ce problème dans le cas de Sqlite, alors

. Je pense que c'est le problème avec la version de Sqlite, j'ai eu le même problème lorsque j'utilisais cette version de SqLite

Version 2.2.4 :

entrez la description de l'image ici

Après avoir vérifié la version ici, entrez la description de l'image ici j'ai changé la version, puis cela a fonctionné.

entrez la description de l'image ici

Aucune erreur après utilisation

Version 2.1.2 :

entrez la description de l'image ici


1

J'ai contourné cela simplement en:

Ajouter SqlServerDbContextOptionsExtensionsà la classe en question RésoudreSqlServerDbContextOptionsExtensions

Cela résout le problème, il doit manquer une référence par défaut.


1

Pour tous ceux qui rencontrent toujours ce problème: utilisez NuGet pour installer: Microsoft.EntityFrameworkCore.Proxies

Ce problème est lié à l'utilisation de Castle Proxy avec EFCore.


1

Wow tant de réponses mais aucune n'a mentionné ce package Microsoft.EntityFrameworkCore.InMemory !

Ajoutez la référence à ce package: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />et vous devriez être prêt à partir.


1

J'ai eu ce problème lorsque je suis passé à Microsoft.EntityFrameworkCore.SqlServer v3.0.0 et Microsoft.EntityFrameworkCore.Tools v3.0.0

Lorsque je suis revenu à la version 2.2.6 sur les deux bibliothèques, l'erreur a disparu. C'est plus une solution de contournement qu'une solution, mais cela vous permettra d'être opérationnel jusqu'à ce que le problème soit résolu.


1

Un moyen simple de résoudre ce problème

Message d'erreur:
entrez la description de l'image ici

Solution:
pour installer "microsoft.entityframeworkcore.sqlserver" avec NuGet
entrez la description de l'image ici

Fixe:
entrez la description de l'image ici

PS: assurez-vous que vous utilisez EF sur le contenu "using Microsoft.EntityFrameworkCore;" entrez la description de l'image ici


0

Pour asp.net core version 2.1, assurez-vous d'ajouter le package suivant pour résoudre le problème. (Au moins, cela résout le problème en utilisant SQLite)

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

Voici la référence de la documentation utilisant SQLite avec le noyau du framework d'entité. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite


0

J'ai eu ce problème, il semble que je n'avais pas ajouté les packages NuGet requis, même si je pensais l'avoir fait, assurez-vous de les vérifier, un par un.


0

Travaille actuellement avec Entity Framework Core 3.1.3. Aucune des solutions ci-dessus n'a résolu mon problème.

Cependant, l'installation du package Microsoft.EntityFrameworkCore.Proxies sur mon projet a résolu le problème. Maintenant, je peux accéder à l'appel de la méthode UseLazyLoadingProxies () lors de la définition de mes options DBContext.

J'espère que cela aide quelqu'un. Consultez l'article suivant:

Chargement paresseux dans EF Core


0

Installer le paquet:

**Microsoft.EntityFrameworkCore.SqlServer**

puis ajoutez le haut de votre classe:

**Microsoft.EntityFrameworkCore;**

ça a marché pour moi


0

Je devais utiliser la ligne

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

dans la méthode ConfigureServices dans Startup.cs


0

La copie du code suivant dans le TodoApi.csproj à partir de https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi a résolu un problème similaire pour moi.

<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 peut être excessif mais il inclut EntityFrameworkCore


-1

Installer le package NuGet Microsoft.EntityFrameworkCore.SqlServer pour résoudre ce problème.

J'utilise la version principale 3.1


2
Cette réponse a déjà été donnée le 29/03/2017. Il n'est pas nécessaire de le répéter
Thomas Weller
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.