【问题标题】:Entity Framework: Drop database if application is reinstalled实体框架:如果重新安装应用程序,则删除数据库
【发布时间】:2016-04-19 19:13:15
【问题描述】:

如果重新安装应用程序,是否可以删除应用程序的数据库?

编辑: 客户希望每次安装新版本的应用程序时都“清除”数据库。 DropCreateDatabaseIfModelChanges 不会削减它,因为他们可能会在不更改模型的情况下安装/重新安装应用程序。

【问题讨论】:

  • 你能把这个问题说得更具体一些,并描述一下你需要什么吗?
  • 重新安装是什么意思?如果模型发生了变化?
  • 需要更多见解。为什么要删除 db ?您将丢失以前的数据。考虑升级应用程序。删除数据库的成本太高了;)
  • 不要在工作环境中丢弃数据,即使数据模型发生变化。您应该创建一些迁移软件来将现有数据从一种模型迁移到新模型。

标签: c# database entity-framework


【解决方案1】:

如果您使用某些安装程序(例如 MSI),您需要在删除数据库的更新、卸载或重新安装事件上添加自定义操作。

其他解决方案是添加到主代码中:

if (IsVersionChanged()) {

    if (Database.Exists(...)) { Database.Drop(...); }
} 

但它没有解决重新安装的情况(您可以尝试通过分析在安装/重新安装时应始终覆盖的文件时间戳来检测这种情况,但只有在您没有安装程序)。

您可以通过多种方式实现 IsVersionChanged。例如,您可以将版本保留在数据库本身中,也可以将最新版本保留在 Windows 注册表中。

【讨论】:

  • 谢谢!我会试试你的解决方案。
【解决方案2】:

您可以使用带有所需参数的数据库 SetInitializer 静态成员。如果没有 db,则创建示例。

public class YourDbContext : DbContext 
    {

        public YourDbContext (): base("yourConnectionString") 
        {
            Database.SetInitializer<YourDbContext>(new CreateDatabaseIfNotExists<YourDbContext>());
        }  
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多