web-dev-qa-db-fra.com

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

Je suis nouveau dans le noyau EF et j'essaie de le faire fonctionner avec mon projet principal asp.net. 

J'obtiens l'erreur ci-dessus dans mon startup.cs lorsque j'essaie de configurer dbcontext pour utiliser une chaîne de connexion à partir 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 méthode usesqlserver 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 à savoir laquelle me manque (voir image) . références

Toute aide serait grandement appréciée,

Merci

24
Maxime Laflamme

C'est un problème connu dans le système de projet. Voir dotnet/project-system # 1741

3
bricelam

Nous installons le package Microsoft.EntityFrameworkCore.SqlServer NuGet. 

Microsoft.EntityFrameworkCore.SqlServer

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Ensuite, 

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

ajout de using Microsoft.EntityFrameworkCore; 

résolu manuellement le problème pour moi

J'ai trouvé ça ici

38
Victor.Uduak

Installez ci-dessous le paquet NuGet va résoudre votre problème

Microsoft.EntityFrameworkCore.SqlServer

Package d'installation Microsoft.EntityFrameworkCore.SqlServer

10
Phani K

J'utilisais du code Visual Studio.

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 ' Le package' Microsoft.EntityFrameworkCore.SqlServer 'est incompatible avec' tous 'les frameworks du projet ' pour le faire.

2) Ajoutez ensuite l'espace de noms 'using 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 "Le package 'Microsoft.EntityFrameworkCore.Design' est incompatible avec" tous "les frameworks du projet", nous devons exécuter la commande ci-dessous,

Code VS: -

dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

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

4
Krishna

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

Import Entity Framework Core:

using Microsoft.EntityFrameworkCore;

Et configurez votre DbContext:

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

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'était pas directement installé dans mon projet, mais le package .Design l'installera quand même comme condition préalable.

1
Andrew S

J'ai contourné cela simplement:

Ajoutez SqlServerDbContextOptionsExtensions à la classe en question Résoudre SqlServerDbContextOptionsExtensions

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

0
Baz G

Pour asp.net core version 2.1, veillez à ajouter le package suivant pour résoudre le problème. (Au moins, cela corrige 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 de la structure d’entité . https://docs.Microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite

0
hmota

Je devais utiliser la ligne 

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

dans la méthode ConfigureServices dans le fichier Startup.cs

0
Blain Ellis

La copie du code suivant dans le fichier TodoApi.csproj à partir de https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi a résolu le même problè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 peut être excessif, mais il inclut EntityFrameworkCore

0
kiwi7