asp.net core - strings - Entity Framework core: DbContextOptionsBuilder ''no contiene una definición de'' usesqlserver ''y ningún método de extensión'' usesqlserver ''
connection strings ef core (11)
Copiando el siguiente código en TodoApi.csproj desde https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi solucioné 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
Soy nuevo en EF Core y estoy tratando de que funcione con mi proyecto asp.net core.
Recibo el error anterior en mi startup.cs
cuando intento configurar el dbcontext para usar una cadena de conexión desde la configuración. 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 método usesqlserver
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 búsqueda en línea apunta a referencias faltantes, pero parece que no puedo encontrar cuál me estoy perdiendo (ver imagen). references
Cualquier ayuda sería apreciada grandemente,
Gracias
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 un requisito previo.
Estaba usando el código de Visual Studio.
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 en el 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 obtiene 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 agrega el paquete Microsoft.EntityFrameworkCore.Design -v 1.1
Estudio visual
Paquete de instalación Microsoft.EntityFrameworkCore.Design -v 1.1
Este es un problema conocido en el sistema del proyecto. Ver dotnet/project-system#1741
Instalamos Microsoft.EntityFrameworkCore.SqlServer NuGet Package.
Microsoft.EntityFrameworkCore.SqlServer
PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer
Entonces,
services.AddDbContext<AspDbContext>(options =>
options.UseSqlServer(config.GetConnectionString("optimumDB")));
Instale a continuación el paquete NuGet resolverá su problema
Microsoft.EntityFrameworkCore.SqlServer
Paquete de instalación Microsoft.EntityFrameworkCore.SqlServer
Logré evitar esto simplemente
Agregue SqlServerDbContextOptionsExtensions
a la clase en cuestión Resuelva SqlServerDbContextOptionsExtensions
Esto soluciona el problema, debe faltar alguna referencia por defecto.
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 el núcleo del marco de la entidad. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite
Siga los pasos a continuación.
Instale el proveedor de base de datos de Entity Framework Core Design y SQL Server para Entity Framework Core:
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Entidad Entidad Framework Core:
using Microsoft.EntityFrameworkCore;
Y configura tu DbContext:
var connectionString = Configuration.GetConnectionString("myDb");
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(connectionString)
);
Tuve que usar la linea
services.AddEntityFrameworkSqlite().AddDbContext<MovieContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
en el método ConfigureServices en el Startup.cs
añadiendo using Microsoft.EntityFrameworkCore;
resuelto manualmente el problema para mi