在以前版本的实体框架中,如果模型发生更改,可以使用某些类DropDatabseIfModelChanges和其他相关类重新创建数据库。 在EF7或EF Core我不知道如何做到这一点。运行迁移有时会出现问题,在项目开始时我需要不断更改模型。
答案 0 :(得分:4)
目前还没有简单的方法在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();
}
答案 1 :(得分:1)
初始化程序不存在于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