asp.net-core - first - entity framework dotnet core nuget




Entity Framework core: DbContextOptionsBuilder 'non contiene una definizione per' usesqlserver 'e nessun metodo di estensione' usesqlserver ' (9)

Sono nuovo di EF core e sto cercando di farlo funzionare con il mio progetto principale asp.net.

Ottengo l'errore sopra riportato nel mio startup.cs quando startup.cs configitare dbcontext per usare una stringa di connessione da config. Sto seguendo questo tutorial: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Il codice problematico in 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));
        }

Il metodo usesqlserver è riconosciuto se lo metto direttamente nel contesto:

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

Tutta la mia ricerca online punta a riferimenti mancanti, ma non riesco a scoprire quale manca (vedi immagine). references

Qualsiasi aiuto sarebbe molto apprezzato,

Grazie


Copiare il seguente codice nel TodoApi.csproj da https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi risolto un problema simile per 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 potrebbe essere eccessivo ma include EntityFrameworkCore


Credo che questo possa essere risolto aggiungendo un riferimento al progetto a Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer non è stato installato direttamente nel mio progetto, ma il pacchetto .Design lo installerà comunque come prerequisito.


Ho dovuto usare la linea

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

nel metodo ConfigureServices in Startup.cs


Installa sotto NuGet Package risolverà il tuo problema

Microsoft.EntityFrameworkCore.SqlServer

Pacchetto di installazione Microsoft.EntityFrameworkCore.SqlServer


Per asp.net core versione 2.1, assicurati di aggiungere il seguente pacchetto per risolvere il problema. (Almeno questo risolve il problema usando SQLite)

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

Ecco il riferimento della documentazione che utilizza SQLite con core di framework di entità. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite


Per chiunque abbia ancora questo problema: utilizzare NuGet per installare: Microsoft.EntityFrameworkCore.Proxies

Questo problema è correlato all'uso di Castle Proxy con EFCore.



Segui i passaggi seguenti.

Installa Entity Framework Core Design e provider di database SQL Server per Entity Framework Core:

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

Import Entity Framework Core:

using Microsoft.EntityFrameworkCore;

E configura il tuo DbContext:

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

aggiungendo using Microsoft.EntityFrameworkCore;

risolto manualmente il problema per me

Trovato qui