c# – 如果模型在没有迁移的EF Core中发生更改,则删除数据库
作者:互联网
在以前版本的实体框架中,如果模型发生更改,可以使用某些类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();
}
标签:c,entity-framework,ef-migrations,asp-net-core,entity-framework-core 来源: https://codeday.me/bug/20190519/1134556.html