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 ).


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

Respuestas:



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

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


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


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 

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

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


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.


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;


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.


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.

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.



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

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í


1

Lo solucioné simplemente:

Agregar SqlServerDbContextOptionsExtensionsa la clase en cuestión ResolverSqlServerDbContextOptionsExtensions

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


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.


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.


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.


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í


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


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.


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


0

Paquete de instalación:

**Microsoft.EntityFrameworkCore.SqlServer**

luego agregue la parte superior de su clase:

**Microsoft.EntityFrameworkCore;**

eso funcionó para mí


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


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


-1

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

Estoy usando Core Version 3.1


2
Esta respuesta ya se dio el 29/03/2017. No hay necesidad de repetirlo nuevamente
Thomas Weller
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.