2

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

创建开发数据库后,对数据库的任何后续更改都已完成,将迁移添加到项目并使用“updata-database”PS 命令更新数据库。

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

该项目在 TFS 中,有时我需要创建该项目的一个新分支,它本质上是第一个的克隆。第一次在本地运行时,数据库尚不存在,但将如前所述创建和播种。现在最大的问题是,以前通过迁移处理的模式更改现在将在第一次创建数据库时应用。如果我然后尝试添加一个新的迁移文件并运行“更新数据库”,我会碰壁,因为它无法运行以前的迁移,因为在创建数据库时已经应用了这些更改。我只能想象我在这里做错了什么,或者只是错过了一个技巧。

总之,我正在寻找有关

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

谢谢阅读。

4

2 回答 2

1

首次使用迁移创建数据库时,播种初始测试数据和所需应用程序数据的最佳方式。

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

于 2012-04-19T09:55:20.077 回答
1

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

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

于 2013-05-12T07:40:46.350 回答