Entity Framework Core: DbContextOptionsBuilder no contiene una definición para 'usesqlserver' y ningún método de extensión 'usesqlserver'

150

Soy nuevo en EF Core y estoy tratando de que funcione con mi proyecto ASP.NET Core.

Recibo el error anterior en mi startup.cscuando intento configurar el DbContextpara usar una cadena de conexión de config. Estoy siguiendo este tutorial: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

El código problemático en 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));
        }

El UseSqlServermétodo se reconoce si lo pongo directamente en el contexto:

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

Toda mi investigación en línea apunta a referencias faltantes, pero parece que no puedo encontrar cuál me estoy perdiendo ( ver imagen ).

Maxime Laflamme
fuente
Lo mismo, intellissense tampoco encuentra el método.
Maxime Laflamme

Respuestas:

24

Este es un problema conocido en el sistema del proyecto. Ver dotnet / project-system # 1741

bricelam
fuente
Gracias, solucioné el problema volviendo a la orientación principal .NET Framework.
Maxime Laflamme
352

Primero instalamos el paquete Microsoft.EntityFrameworkCore.SqlServer NuGet:

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Luego, después de importar el espacio de nombres con

using Microsoft.EntityFrameworkCore;

agregamos el contexto de la base de datos:

services.AddDbContext<AspDbContext>(options =>
    options.UseSqlServer(config.GetConnectionString("optimumDB")));
Ganar
fuente
3
Gracias por la respuesta pero ya lo hice. Estoy empezando a sospechar que algo está dañado en mi proyecto original. Intentaré ver si puedo reproducirme de un nuevo proyecto ...
Maxime Laflamme
10
Esta respuesta debe marcarse como respuesta correcta, no las otras, la razón es que el método UseSqlServer es de este paquete y no de los otros paquetes.
H35am
107

agregando using Microsoft.EntityFrameworkCore;

resuelto manualmente el problema para mí

Encontramos eso aquí

Editar...

para dotnet core 3.1 agregar

Microsoft.EntityFrameworkCore.SqlServer

Victor.Uduak
fuente
55
Esta es la respuesta.
smulholland2
¡Me lo arregló! De alguna manera no estaba en la lista de sugerencias ctrl +.
Ron Splinter
Lo arregló para mí en 2019 con .Net Core 2.2
lucamuh
1
Sí, pero descubrí que el paquete Microsoft.EntityFrameworkCore.SqlServer era necesario para dotnetcore 3.1. Antes de eso, parecía que Microsoft.EntityFrameworkCore solo era suficiente.
Jeremy Ray Brown
31

Instalar a continuación NuGet Package resolverá su problema

Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Phani K
fuente
1
Agregue un poco más de explicación sobre cómo este comando de una línea resolverá el problema del operador. Específicamente, aquí está abordando un paquete, por lo que debe explicar cómo funciona ese paquete.
Parth Pandya
"DbContextOptionsBuilder.UseSqlServer" está disponible en el paquete Microsoft.EntityFrameworkCore.SqlServer , por lo que debe agregar la referencia para resolver el problema de compilación.
Phani K
9

Falta el paquete. Abra Package Console Console y ejecute el siguiente código:

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

Sigue los pasos a continuación.

Instale Entity Framework Core Design y el proveedor de bases de datos SQL Server para Entity Framework Core:

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

Núcleo de marco de entidad de importación:

using Microsoft.EntityFrameworkCore;

Y configure su DbContext:

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

Estaba usando Visual Studio Code.

1) Intente instalar el paquete 'Microsoft.EntityFrameworkCore.SqlServer' especificando el número de versión.

Código VS :

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

Estudio visual:-

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

Consulte el enlace ' Paquete' Microsoft.EntityFrameworkCore.SqlServer 'es incompatible con' todos 'los marcos del proyecto ' para hacerlo.

2) Luego agregue el espacio de nombres ' usando Microsoft.EntityFrameworkCore; 'manualmente en el archivo Startup.cs.

Consulte el siguiente enlace https://github.com/aspnet/EntityFramework/issues/7891 .

3) Si tiene algún problema de dependencia para ' Microsoft.EntityFrameworkCore.SqlServer.Design' , como "Paquete ' Microsoft.EntityFrameworkCore.Design' es incompatible con 'todos' los marcos en el proyecto ', necesitamos ejecutar el siguiente comando,

Código VS: -

dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1

Estudio visual

Install-Package Microsoft.EntityFrameworkCore.Design -v 1.1

Krishna
fuente
1
Este realmente funciona. Esta es la mejor respuesta a la pregunta. Gracias @ Krishna
penderi
6

Proyecto -> ManageNugetPackages -> Examinar -> Buscar "Microsoft.EntityFrameworkCore.SqlServer" e instalarlo o actualizarlo.

Bugay Sarikaya
fuente
4

Como se menciona en la respuesta de mayor puntuación de Win, es posible que deba instalar Microsoft.EntityFrameworkCore.SqlServer NuGet Package, pero tenga en cuenta que esta pregunta está utilizando asp.net core mvc. En el último ASP.NET Core 2.1, MS ha incluido lo que se llama un metapaquete llamado Microsoft.AspNetCore.App

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

Puede ver la referencia si hace clic con el botón derecho en el proyecto ASP.NET Core MVC en el explorador de soluciones y selecciona Edit Project File

Debería ver este metapaquete si el núcleo de ASP.NET utiliza la instrucción de uso

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

Microsoft.EntityFrameworkCore.SqlServer se incluye en este metapaquete. Entonces, en su Startup.cs, es posible que solo necesite agregar:

using Microsoft.EntityFrameworkCore;

Hevski
fuente
3

Creo que esto se puede resolver agregando una referencia de proyecto a Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer no se instaló directamente en mi proyecto, pero el paquete .Design lo instalará de todos modos como requisito previo.

Andrew S
fuente
Instalar un paquete innecesario que trae el proyecto requerido como dependencia transitiva no es una solución al problema.
Smit
Asume que el paquete es innecesario, pero solucionó mi proyecto cuando tuve exactamente el mismo problema.
Andrew S
Ese paquete es innecesario para la pregunta actual. Puede ser necesario para un problema diferente, pero no para este.
Smit
A partir de hoy, 27 de julio, puede instalar solo el paquete Microsoft.EntityFrameworkCore.SqlServer y resolverá el problema
danfer
3
A partir de hoy, 5 de febrero de 2018, aún debe agregar el paquete Microsoft.EntityFrameworkCore.SqlServer.Design. Esto se observó utilizando un proyecto web ASP.NET Core 2.0.1.
Rus
3

Para mí, este problema ocurrió con Visual Studio Code y pude solucionarlo con 2 pasos:

  1. Agregar manualmente using Microsoft.EntityFrameworkCore;
  2. Corriendo dotnet builden la terminal.
Askar
fuente
3

En Visual Studio, verifique el Administrador de paquetes NuGet => Gestionar paquetes para la solución , verifique todos estos paquetes, ya sea que estén instalados en su solución o no, como se muestra a continuación:

  1. EntidadMarcoCore
  2. Microsoft.EntityFrameworkCore
  3. Microsoft.EntityFrameworkCore.InMemory
  4. Microsoft.EntityFrameworkCore.Relational
  5. Microsoft.EntityFrameworkCore.Sqlite.Core
  6. Microsoft.EntityFrameworkCore.SqlServer
  7. Microsoft.EntityFrameworkCore.Tools

Resolví los mismos problemas después de verificar que todos los paquetes anteriores se hayan instalado.

Wen Qin Yap
fuente
3

primero agregar Install-Package Microsoft.EntityFrameworkCore.SqlServer

luego agregue en su archivo .cs using Microsoft.EntityFrameworkCore;

finalmente agregue esto en su núcleo Startup.cs

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

Si enfrenta este problema en el caso de Sqlite, entonces

. Creo que este es el problema con la versión de Sqlite, tuve el mismo problema cuando estaba usando estas versiones de SqLite

Versión 2.2.4 :

ingrese la descripción de la imagen aquí

Después de verificar la versión aquí ingrese la descripción de la imagen aquí , cambié la versión y luego funcionó.

ingrese la descripción de la imagen aquí

No hay error después de usar esto

Versión 2.1.2 :

ingrese la descripción de la imagen aquí

TAHA SULTAN TEMURI
fuente
1

Lo solucioné simplemente:

Agregar SqlServerDbContextOptionsExtensionsa la clase en cuestión ResolverSqlServerDbContextOptionsExtensions

Esto soluciona el problema, debe faltar alguna referencia por defecto.

Baz G
fuente
1

Para cualquiera que todavía tenga este problema: use NuGet para instalar: Microsoft.EntityFrameworkCore.Proxies

Este problema está relacionado con el uso de Castle Proxy con EFCore.

Vima91
fuente
1

¡Wow tantas respuestas pero ninguna mencionó este paquete Microsoft.EntityFrameworkCore.InMemory !

Agregue la referencia a este paquete: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />y debería estar listo para comenzar.

pso
fuente
1

Tuve este problema cuando me mudé a Microsoft.EntityFrameworkCore.SqlServer v3.0.0 y Microsoft.EntityFrameworkCore.Tools v3.0.0

Cuando volví a cambiar a v2.2.6 en ambas bibliotecas, el error desapareció. Esto es más una solución que una solución, pero lo pondrá en funcionamiento hasta que se solucione el problema.

Ian Gibblet
fuente
1

Manera fácil de solucionar este problema

Mensaje de error:
ingrese la descripción de la imagen aquí

Solución:
instalar "microsoft.entityframeworkcore.sqlserver" con NuGet
ingrese la descripción de la imagen aquí

Fijo:
ingrese la descripción de la imagen aquí

PD: asegúrese de usar EF en el contenido "usando Microsoft.EntityFrameworkCore;" ingrese la descripción de la imagen aquí

Willie Cheng
fuente
0

Para asp.net core versión 2.1, asegúrese de agregar el siguiente paquete para solucionar el problema. (Al menos esto soluciona el problema usando SQLite)

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

Aquí está la referencia de la documentación que usa SQLite con entidad framework core. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite

hmota
fuente
0

Tuve este problema, parece que no había agregado los paquetes NuGet requeridos, aunque pensé que lo había hecho, asegúrese de verificarlos, uno por uno.

Novato
fuente
0

Actualmente trabajando con Entity Framework Core 3.1.3. Ninguna de las soluciones anteriores solucionó mi problema.

Sin embargo, la instalación del paquete Microsoft.EntityFrameworkCore.Proxies en mi proyecto solucionó el problema. Ahora puedo acceder a la llamada al método UseLazyLoadingProxies () al configurar mis opciones de DBContext.

Espero que esto ayude a alguien. Ver el siguiente artículo:

Carga perezosa en EF Core

Eric Conklin
fuente
0

Paquete de instalación:

**Microsoft.EntityFrameworkCore.SqlServer**

luego agregue la parte superior de su clase:

**Microsoft.EntityFrameworkCore;**

eso funcionó para mí

nh Dalim
fuente
0

Tuve que usar la línea

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

en el método ConfigureServices en Startup.cs

Blain Ellis
fuente
0

Copiar el siguiente código en TodoApi.csproj desde https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi resolvió un problema similar para mí.

<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 puede ser excesivo pero incluye EntityFrameworkCore

kiwi7
fuente
-1

Instale el paquete NuGet Microsoft.EntityFrameworkCore.SqlServerpara resolver este problema.

Estoy usando Core Version 3.1

Mehedi Hasan
fuente
2
Esta respuesta ya se dio el 29/03/2017. No hay necesidad de repetirlo nuevamente
Thomas Weller