ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final issue - Il compilatore vuole che il riferimento 7.0.0.0 non venga trovato

asp.net asp.net-core c# dnu entity-framework-core

Domanda

Sto avendo lo stesso problema. Ho aggiunto le seguenti dipendenze nel mio file project.json :

"dependencies": {
    "EntityFramework": "7.0.0-beta4",
    "EntityFramework.Core": "7.0.0-rc1-final",
    "EntityFramework.SqlServer": "7.0.0-beta8",
    "EntityFramework.Commands": "7.0.0-rc1-final"
  },
  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel",
    "ef": "EntityFramework.Commands"
  },
...

Ho usato dnu install EntityFramework e dnu install EntityFramework.SqlServer per installare i pacchetti. "EntityFramework": "7.0.0-beta4", stato scritto automaticamente dal nodo delle dependencies dal programma di installazione stesso.

Problema / Domanda 1: Con mia sorpresa quando stavo tirando dentro l' EntityFramework per EntityFramework la versione disponibile che sto presentando è solo 6.1.3 !

Problema 2: Quando dnu build compilazione della mia applicazione usando dnu build ( dnu restore comando dnu restore dopo aver aggiunto EntityFramework assembly .Core ( .Core e .Commands ) manualmente sotto il nodo delle dependencies Sto ricevendo un sacco di errori di compilazione:

The type 'DbContextOptionsBuilder' is defined in an assembly that is not referenced. You must add a reference to assembly 'EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null'.
D:\Projects\aspnet\apiservice\Models\SampleData.cs(12,41): DNXCore,Version=v5.0 error CS0308: The non-generic method 'IServiceProvider.GetService(Type)' cannot be used with type arguments
D:\Projects\aspnet\apiservice\Models\SampleData.cs(13,32): DNXCore,Version=v5.0 error CS0308: The non-generic method 'IServiceProvider.GetService(Type)' cannot be used with type arguments
D:\Projects\aspnet\apiservice\Models\SampleData.cs(14,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Books' and no extension method 'Books' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(15,42): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(17,43): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(19,45): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(22,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Books' and no extension method 'Books' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(61,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'SaveChanges' and no extension method 'SaveChanges' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

Se rimuovo l' .Core e .Commands riferimento alla fine del progetto.

Quindi ho cambiato la versione di EntityFramework.Core in 7.0.0.0 come indicato nell'errore:

The type 'DbContextOptionsBuilder' is defined in an assembly that is not referenced. You must add a reference to assembly 'EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null'.

Ma dnu restore ora mi ha dato il seguente:

Unable to locate Dependency EntityFramework.Core >= 7.0.0
Writing lock file D:\Projects\aspnet\apiservice\project.lock.json
Restore complete, 6675ms elapsed

Errors in D:\Projects\aspnet\apiservice\project.json
    Unable to locate Dependency EntityFramework.Core >= 7.0.0

Sono un novizio in asp.net 5 piattaforma di Visual Studio code . E non posso utilizzare Visual Studio 2015 poiché gli altri membri del team di sviluppo utilizzano OSX.

Questo è un progetto di apprendimento per me. Il requisito è abbastanza semplice. Connetti un database SQL Server, estrae i dati relazionali master-child usando Entity Framework.

Avvitato! Aiuto!!

Grazie in anticipo

AGGIORNARE

  1. Riesco a vedere i principali cambiamenti in project.json per tutti i pacchetti con la versione 7.0.0-rc1-final . Ho usato lo strumento generatore Yeoman per creare il progetto ma sembra che tu abbia corretto il pacchetto tramite Visual Studio . Quindi, devo aggiornare la versione del pacchetto manualmente e restore ?

  2. Quando il progetto è stato creato / generato da Yeoman, non è stato aggiunto il file global.json per impostazione predefinita. Posso aggiungerlo manualmente e inserire il codice a mano? Funzionerà?

  3. Posso anche vedere alcuni ulteriori riferimenti al pacchetto aggiunti al file project.json che non sono stati aggiunti per impostazione predefinita dal generatore Yeoman, come Microsoft.AspNet.Tooling.Razor , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging ecc. Vengono utilizzati tutti efficacemente nel progetto? Perché il generatore non li ha aggiunti automaticamente, di nuovo, posso aggiungerli manualmente e ripristinare usando il dnu restore ? Questo avrà qualche impatto sul progetto se li aggiungo manualmente?

Risposta accettata

È necessario rimuovere "EntityFramework" dalle dipendenze (rimuovere la riga "EntityFramework": "7.0.0-beta4" ) e utilizzare

"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final",
"EntityFramework.Commands": "7.0.0-rc1-final"

solo. Non è necessario aggiungere "EntityFramework.Core": "7.0.0-rc1-final" esplicitamente se è stato aggiunto "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final" causa delle seguenti dipendenze:

"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final":
    "EntityFramework.Relational": "7.0.0-rc1-final":
        "EntityFramework.Core": "7.0.0-rc1-final"

Intendo che EntityFramework.MicrosoftSqlServer richiede EntityFramework.Relational , che richiede EntityFramework.Core .

È necessario verificare inoltre che global.json contenga "sdk": { "version": "1.0.0-rc1-update1" } .

AGGIORNATO : ho esaminato il progetto di test che hai caricato. Aveva molti piccoli problemi. L'ho modificato. Puoi scaricare il progetto modificato qui . Non dimenticare di correggere ConnectionString utilizzato in appsettings.json , contiene il Server che ho usato su di me.

Le modifiche più importanti sono l'utilizzo di BookContext.cs più semplice:

using Microsoft.Data.Entity;

namespace apiservice.Models {
    public class BookContext : DbContext {
        public DbSet<Author> Authors { get; set; }
        public DbSet<Book> Books { get; set; }
    }
}

l'utilizzo dei seguenti SampleData.cs

using System;
using System.Linq;
using Microsoft.Data.Entity;
using Microsoft.Extensions.DependencyInjection;

namespace apiservice.Models
{
    public static class SampleData
    {
        public static void Initialize(IServiceProvider serviceProvider) {
            var context=serviceProvider.GetService<BookContext>();
            context.Database.Migrate();
            if (!context.Books.Any()) {
                var austen = context.Authors.Add(
                    new Author { LastName = "Austen", FirstName = "Jane" }).Entity;
                var dickens = context.Authors.Add(
                    new Author { LastName = "Dickens", FirstName = "Charles" }).Entity;
                var cervantes = context.Authors.Add(
                    new Author { LastName = "Cervantes", FirstName = "Miguel" }).Entity;

                context.Books.AddRange(
                    new Book {
                        Title = "Pride and Prejudice",
                        Year = 1813,
                        Author = austen,
                        Price = 9.99M,
                        Genre = "Comedy of manners"
                    },
                    new Book {
                        Title = "Northanger Abbey",
                        Year = 1817,
                        Author = austen,
                        Price = 12.95M,
                        Genre = "Gothic parody"
                    },
                    new Book {
                        Title = "David Copperfield",
                        Year = 1850,
                        Author = dickens,
                        Price = 15,
                        Genre = "Bildungsroman"
                    },
                    new Book {
                        Title = "Don Quixote",
                        Year = 1617,
                        Author = cervantes,
                        Price = 8.95M,
                        Genre = "Picaresque"
                    }
                );

                context.SaveChanges(); 
            }
        }
    }    
}

l'utilizzo di project.json con la seguente parte delle dependencies :

{
  "dependencies": {
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
    "Microsoft.Extensions.DependencyInjection": "1.0.0-rc1-final",
    "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final",
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "System.Net.Http": "4.0.1-beta-23516",
    "Microsoft.Net.Http": "2.2.29",
    "Newtonsoft.Json": "8.0.1"
  },
  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel",
    "ef": "EntityFramework.Commands"
  },
  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  }
}

fissaggio di appsettings.json da

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Verbose",
      "System": "Information",
      "Microsoft": "Information"
    },
    "Data": {
        "DefaultConnection":{
            "ConnectionString": "Server=localhost;Database=BookStore;User Id=sa; Password=******;Trusted_Connection=true;"
        }
    }
  }
}

a

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Verbose",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=localhost;Database=BookStore;User Id=sa; Password=******;Trusted_Connection=true;"
    }
  }
}

(I Data non dovrebbero essere sotto Logging )

e l'utilizzo dei seguenti Startup.cs

using apiservice.Models;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Data.Entity;


namespace apiservice
{
    public class Startup
    {
        public static IConfigurationRoot Configuration {get; set;}

        public Startup(IHostingEnvironment env)
        {
            // Set up configuration sources.
            var builder = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        // 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.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<BookContext>(options => 
                    options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])
                );

            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            // we need to execute the following two commands before

            //    dnu restore
            //    dnx ef migrations add Initial
            //    dnx ef database update   

            // For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
            try
            {
                using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
                    .CreateScope())
                {
                    serviceScope.ServiceProvider.GetService<BookContext>()
                         .Database.Migrate();
                }
            }
            catch { }

            app.UseIISPlatformHandler();

            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

            SampleData.Initialize(app.ApplicationServices);
        }

        // Entry point for the application.
        public static void Main(string[] args) => WebApplication.Run<Startup>(args);
    }
}

Ho scritto nel commento all'interno del metodo Configure che si dovrebbero eseguire i comandi

dnx ef migrations add Initial
dnx ef database update

dopo che tutti i pacchetti sono stati ripristinati. dnx ef migrations add Initial creerà una cartella Migrations aggiuntiva nel progetto con i file come 20160101205609_Initial.cs e BookContextModelSnapshot.cs . Il database definito in appsettings.json verrà creato dnx ef database update di dnx ef database update e sarà riempito con i dati di test da SampleData.cs durante il biforcarsi con il programma.

Tra l'altro ho spostato package.json all'interno della cartella del pacchetto (allo stesso livello di project.json ). Non si usano i pacchetti, ma il movimento rende visibili i pacchetti npm e la gestione in Visual Studio.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché