使用实体框架迁移为项目设定种子和分支项目



我正在使用实体框架代码进行项目,首先使用迁移 4.3。在本地运行时,我的 web.config 配置为面向数据库初始值,该初始化器实现CreateDatabaseIfNotExists<DataContext>用测试数据为我的开发数据库播种,但也在第一次运行时填充各种"静态"可查找数据。

创建开发数据库后,对数据库

的任何后续更改都将完成,将迁移添加到项目中,并使用"updata-database"PS 命令更新数据库。

当我对项目感到满意时,我会使用 webdeploy 部署代码,但手动复制数据库,因为 webdeploy 不包括迁移表。部署时,我使用 web.config 转换来设置实现MigrateDatabaseToLatestVersion<DataContext>的新数据库初始值设定项。然后,这将应用之后部署的基于代码的新迁移。这一切都运行良好,但我担心这是否是不仅使用测试数据而且使用运行应用程序所需的数据初始化我的数据库的最佳方法。我正在寻找一种创建初始种子数据的好方法,而不必将其挂接到CreateDatabaseIfNotExists<DataContext>而是挂接到迁移中。我意识到配置类上有一个种子方法,但看到它在每次迁移时都会更新数据库,这不是理想的解决方案。

该项目在TFS中,我不时需要创建该项目的新分支,其本质是第一个分支的克隆。首次在本地运行此数据库时,数据库尚不存在,但将如前所述创建并设定种子。现在最大的问题是,以前通过迁移处理的架构更改现在将在首次创建数据库时应用。如果我随后尝试添加新的迁移文件并运行"update-database",我会遇到一堵墙,因为它无法运行以前的迁移,因为这些更改在创建数据库时已经应用。我只能想象我在这里做错了什么,或者只是错过了一个技巧。

总之,我正在寻找有关以下方面的信息

    首次
  1. 使用迁移创建数据库时播种初始测试数据和所需应用程序数据的最佳方法。
  2. 在分支包含代码迁移的项目并且必须首次创建数据库时克服问题的最佳方法。

感谢您的阅读。

在以下情况下播种初始测试数据和所需应用程序数据的最佳方法 首次使用迁移创建数据库。

迁移配置具有Seed方法,该方法正是为了解决此问题而存在的。在此方法中,可以使用AddOrUpdate扩展方法来初始化核心数据。扩展方法将首先检查数据库中是否已存在记录,然后更新它或插入新记录。

我觉得使用 Seed 方法初始化数据库对于除了非常小和简单的数据集之外的任何数据集都是错误的。原因是正如您所说,它只是运行得太频繁了。 我们已将数据初始化移出应用程序并移至安装过程。 我们刚刚构建了一组使用普通实体框架代码来创建所需数据的方法。 这样,我们就不必担心性能问题,并且可以更轻松地编写验证数据创建代码的测试。

为了在开发过程中初始化数据库,我们有一组单元测试,它们将运行与安装程序相同的代码。开发人员只需运行单元测试,他们的数据库就会正确初始化。

最新更新