2014-02-20 176 views
1

我已经写在与SQL Server精简4.0数据库组合使用EF 6.0的应用程序。当客户第一次使用这个应用程序时,它(应用程序)应该在给定路径中创建一个具有初始值的数据库文件。也应该允许迁移,因为很可能对象模型可能随着将来版本的应用程序而改变。策略部署EF控制数据库

现在I'm想知道什么将是部署用户生产系统上的数据库的最佳方式。我能想到的方法有三种:

  1. 我可以创建一个数据库文件与初始值,只是在安装过程中把它复制到正确的位置,并在应用程序中使用MigrateDatabaseToLatestVersionInitializer。

  2. 在的DbContext-构造函数(我有两个上下文),我可以据此检查现有DB-文件,并使用不同的数据库,初始化器。类似于CreateDatabaseIfNotExistsInitializer,其中包含一个种子方法,该方法在未找到场时创建初始数据,如果DB文件存在则创建MigrateDatabaseToLatestVersionInitializer。

  3. 我可以始终使用MigrateDatabaseToLatestVersionInitializer并在其“种子” - 方法检查现有表项并创建它们(如果它们不存在)。

以下哪种方式是首选或者是有没有更好的办法,我认为didn't的?

回答

1

这听起来像这是一个桌面应用程序,所以你可能要赶上约在安装时创建的数据库文件(即选项1),而不是运行时间,尤其是在选项2数据库初始化权限的错误不是一个势在必行你给的命令,你可以尝试......抓住周围。

我不认为选项3会工作,因为Seed方法在所有迁移后运行,所以肯定迁移将成功运行,在这种情况下表不需要创建,否则它们将失败因为数据库不存在,因此你的Seed方法不会运行。当然you're权,方法doesn't在所有的工作

+0

,因为MigrateToLatestDatabase初始化程序需要现有的数据库,或者可能是migrationhistory表我承担。我想我会坚持方法1。 – tafkab76