Dopo l'aggiornamento a ASP.NET Core 2.0, non riesco più a creare migrazioni.
Sto arrivando
"Si è verificato un errore durante il richiamo del metodo 'BuildWebHost' sulla classe 'Programma'. Continua senza il fornitore del servizio dell'applicazione Errore: si sono verificati uno o più errori. (Impossibile aprire il database" ... "richiesto dal login. non riuscito per l'utente '...' "
e
"Impossibile creare un oggetto di tipo" MyContext ". Aggiungere un'implementazione di" IDesignTimeDbContextFactory "al progetto oppure consultare https://go.microsoft.com/fwlink/?linkid=851728 per ulteriori modelli supportati in fase di progettazione."
Il comando che ho eseguito in precedenza era $ dotnet ef migrations add InitialCreate --startup-project "..\Web"
(dal progetto / cartella con DBContext).
Stringa di connessione: "Server=(localdb)\\mssqllocaldb;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true"
Questo è il mio Program.cs
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
È possibile aggiungere una classe che implementa IDesignTimeDbContextFactory all'interno del proprio progetto Web.
Ecco il codice di esempio:
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<CodingBlastDbContext>
{
public CodingBlastDbContext CreateDbContext(string[] args)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var builder = new DbContextOptionsBuilder<CodingBlastDbContext>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
builder.UseSqlServer(connectionString);
return new CodingBlastDbContext(builder.Options);
}
}
Quindi, accedere al progetto del database ed eseguire quanto segue dalla riga di comando:
dotnet ef migrations add InitialMigration -s ../Web/
dotnet ef database update -s ../Web/
-s stands for startup project and ../Web/ is the location of my web/startup project.
Non c'è bisogno di IDesignTimeDbContextFactory
.
Correre
add-migration initial -verbose
che rivelerà i dettagli sotto
Si è verificato un errore durante l'accesso a IWebHost sulla classe 'Programma'. Continuare senza il fornitore di servizi applicativi.
avviso, che è la causa principale del problema.
Nel mio caso , il problema era, avendo ApplicationRole : IdentityRole<int>
e invocando services.AddIdentity<ApplicationUser, IdentityRole>()
che stava causando l'errore di sotto
System.ArgumentException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole',
on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,
TKey,TUserClaim,TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type 'TRole'.
---> System.TypeLoadException: GenericArguments[1], 'Microsoft.AspNetCore.Identity.IdentityRole',
on 'Microsoft.AspNetCore.Identity.UserStoreBase`8[TUser,TRole,TKey,TUserClaim,
TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type parameter 'TRole'.