c# – 如果模型在没有迁移的EF Core中发生更改,则删除数据库

在以前版本的实体框架中,如果模型发生更改,可以使用某些类DropDatabseIfModelChanges和其他相关类重新创建数据库.在EF7或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# – 如果模型在没有迁移的EF Core中发生更改,则删除数据库

基础教程推荐