Tengo un problema extraño de que EF Core 2.0 no reconoce mi migración.
Al ejecutar el comando Add-Migration
en PM, las clases MyFirstMigration
se crean dentro de la carpeta Migrations
.
Contexto:
Protected Overrides Sub OnConfiguring(optionsBuilder As DbContextOptionsBuilder )
optionsBuilder.UseSqlite("Data Source=blogging.db")
End Sub
Código de 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.
Cuando reviso el archivo dababase , existe la tabla __EFMigrationsHistory , pero no la tabla de Blog. Como puede sospechar, al ejecutar db.SaveChanges () se produce una excepción y me dice que la tabla no existe.
La ejecución de db.Database.Migrate () no hace nada, pero cuando elimino el archivo db y ejecuto db.Database.EnsureCreated () , se crea la base de datos correcta.
Debo señalar que la tabla __EFMigrationsHistory se crea vacía, por lo que inmediatamente después de Actualizar-Base de datos, puedo crear la próxima migración y generará exactamente el mismo código que en la primera.
Estoy utilizando VS 15.3.5 y .Net 4.6.1 en WPF.
/ Atentamente
¿Es porque Add-Migration
está agregando archivos C # a su proyecto VB.NET? Puede agregarlos a un proyecto de C # separado, hacer referencia a él desde su ensamblaje DbContext
y agregar la actualización de OnConfiguring
a lo siguiente.
optionsBuilder.UseSqlite("Data Source=blogging.db", Sub(x) x.MigrationsAssembly("MyCSharpProject"))
Tuve este problema donde mis migraciones no contenían ninguna entidad, luego noté algo que no es muy obvio. La clase DbContext analiza sus propias variables miembro y luego aplica las propiedades del modelo de atributo / fluidez a la migración generada.
Así que asegúrate de que tu DbContext tenga algo como esto:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public virtual DbSet<Blog> Blogs { get; set; }
Además, después de realizar cualquier cambio, recuerde que necesita generar una nueva migración. Lo que parece funcionar un poco diferente al anterior, donde update-database
(PMC) solía aplicar siempre nuevos cambios.