Ho uno strano problema che la mia migrazione non è riconosciuta dall'EF Core 2.0
Quando si esegue il comando Add-Migration
in PM, le classi MyFirstMigration
vengono create all'interno della cartella Migrations
.
Contesto:
Protected Overrides Sub OnConfiguring(optionsBuilder As DbContextOptionsBuilder )
optionsBuilder.UseSqlite("Data Source=blogging.db")
End Sub
Codice PM:
PM> Add-Migration MyFirstMigration
To undo this action, use Remove-Migration.
PM> Update-Database
No migrations were applied. The database is already up to date.
Done.
Quando controllo il file dababase , esiste la tabella __EFMigrationsHistory , ma non la tabella Blog. Come sospetti, l'esecuzione di db.SaveChanges () genera un'eccezione e indica che la tabella non esiste.
L'esecuzione di db.Database.Migrate () non fa nulla, ma quando elimino il file db ed eseguo db.Database.EnsureCreated () , viene creato il database corretto.
Devo sottolineare che la tabella __EFMigrationsHistory è stata creata vuota, quindi posso immediatamente dopo che Update-Database crea la prossima migrazione e genererà esattamente lo stesso codice del primo.
Sto usando VS 15.3.5 e .Net 4.6.1 su WPF.
/ I migliori saluti
È perché Add-Migration
sta aggiungendo file C # al tuo progetto VB.NET? È possibile aggiungerli a un progetto C # separato, fare riferimento al gruppo DbContext
e aggiungere Aggiorna OnConfiguring
a quanto segue.
optionsBuilder.UseSqlite("Data Source=blogging.db", Sub(x) x.MigrationsAssembly("MyCSharpProject"))
Ho avuto questo problema in cui le mie migrazioni non contenevano alcuna entità, quindi ho notato qualcosa che non è molto ovvio. La classe DbContext esamina le proprie variabili membro e applica quindi tutte le proprietà del modello fluente / attributo alla migrazione generata.
Quindi assicurati che il tuo DbContext abbia qualcosa del genere:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public virtual DbSet<Blog> Blogs { get; set; }
Ricorda anche dopo aver apportato le modifiche necessarie per generare una nuova migrazione. Che sembra funzionare un po 'diverso rispetto a prima, dove update-database
(PMC) utilizzava sempre nuove modifiche.