如果模型在EF Core中更改而不进行迁移,则删除数据库
本文关键字:迁移 数据库 删除 EF 模型 Core 如果 | 更新日期: 2023-09-27 18:05:02
在以前版本的实体框架中,如果模型更改,可以使用DropDatabseIfModelChanges类和其他相关类重新创建数据库。在EF7或EF Core中我不知道如何做到这一点。运行迁移有时会出现问题,并且在项目开始时我需要不断更改模型。
目前没有简单的方法在EFCore中实现DropDatabseIfModelChanges
。EF6通过在__MigrationHistory
表中存储模型的快照并将其与当前模型进行比较来工作。EnsureCreated
在EFCore中没有存储这些信息。
为了模仿EFCore中的行为,您可以在EFCore中创建数据库时手动存储模型的哈希值,在启动时检查哈希值,如果数据库发生更改,则删除并重新创建数据库。
var currentHash = MyHashingFunction(db.Model);
if (db.GetService<IRelationalDatabaseCreator>().Exists()
&& !db.Set<ModelHash>().Any(mh => mh.Value == currentHash))
{
// Drop if changed
db.Database.EnsureDeleted();
}
if (db.Database.EnsureCreated())
{
// Insert hash if created
db.Add(new ModelHash { Value = currentHash });
db.SaveChanges();
}
EF Core中不存在初始化式。相反,你可以调用EnsureCreated(也可能是EnsureDeleted):
public class MyCountriesContext : IdentityDbContext<ApplicationUser>
{
public MyCountriesContext()
{
Database.EnsureCreated();
}
public DbSet<Visit> Visits { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Visit>().Key(v => v.Id);
base.OnModelCreating(builder);
}
}
见https://wildermuth.com/2015/03/17/A_Look_at_ASP_NET_5_Part_3_-_EF7