Ricevo un errore quando provo ad aggiungere Migration for Entity Framework Core, a un progetto Code First, ecco i dettagli ...
Ho creato un nuovo progetto Web ASP.Net Core (Core 2.0 in VS 2017). Sta usando la dipendenza Microsoft.AspNetCore.All, mostrata di seguito:
Sto cercando di utilizzare l'Entity Framework Core (la mia comprensione era che tutti i metadati avevano già le dipendenze EF Core incluse, mostrate di seguito, sembrano corrette):
Ho impostato le mie entità e il mio contesto e mi sono assicurato che il db sia configurato usando il seguente codice.
Modello di esempio
public class City
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
[MaxLength(200)]
public string Description { get; set; }
}
Esempio di contesto
public class CityInfoContext : DbContext
{
public DbSet<City> Cities { get; set; }
public DbSet<PointOfInterest> PointsOfInterest { get; set; }
public CityInfoContext(DbContextOptions options) : base(options)
{
Database.EnsureCreated();
}
}
Startup.cs Config
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddMvcOptions(options => {
options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
})
.AddJsonOptions(options => {
if (options.SerializerSettings.ContractResolver != null)
{
var res = options.SerializerSettings.ContractResolver as DefaultContractResolver;
res.NamingStrategy = null;
}
});
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IMailService, LocalMailService>();
// Entity Framework services.
var connectionString = @"Server=(localdb)\mssqllocaldb;Database=CityInfoDB;Trusted_Connection=True;";
services.AddDbContext<CityInfoContext>(options => options.UseSqlServer(connectionString));
}
Inizializzazione del conext db con questa riga nel mio controller:
public class DummyController : Controller
{
CityInfoContext _ctx;
public DummyController(CityInfoContext ctx)
{
_ctx = ctx;
}
}
Vedo che il db è stato creato con successo - tutto bene finora.
Voglio fare un'istantanea del mio db usando questo comando: PM> Add-Migration CityInfoInitialMigration
Ma ottieni l'errore: il pacchetto EntityFramework non è installato sul progetto 'CityInfo.API'.
Qualcuno l'ha mai visto prima? Ho provato esplicitamente ad aggiungere i pacchetti EF ma non ha funzionato neanche!
Sono stato in grado di superare questo problema utilizzando l'interfaccia della riga di comando, seguendo l'articolo:
https://docs.microsoft.com/en-gb/aspnet/core/data/ef-mvc/migrations#introduction-to-migrations
NPM> Get-Module
Se il risultato contiene EntityFramework
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 6.0.0.0 EntityFramework {Add- EFDefaultConnectionFactory, Add-EFProvider, Add-Migration, Enable-Migrations...}
Script 2.0.0 EntityFrameworkCore {Add-Migration, Drop-Database, Enable-Migrations, Get-DbContext...}
Script 2.0.0.0 NuGet {Add-BindingRedirect, Find-Package, Get-Package, Get-Project...}
Script 0.0 profile
EntityFrameworkCore
significa che entrambi i EntityFrameworkCore
ed EntityFramework
Nuget sono installati in un progetto e ciò causa
Il pacchetto EntityFramework non è installato
Nel mio caso, stavo facendo riferimento a un pacchetto Nuget che faceva riferimento a EntityFramework 6.0.0
(quindi il pacchetto EntityFramework
è stato indicato indirettamente ). Dopo aver rimosso quel pacchetto, l'errore è stato corretto.
Il modo più semplice per trovare tale riferimento è utilizzare la finestra di dialogo Search Solution Explorer