部署EF控制数据库的策略

时间:2014-02-20 08:50:58

标签: entity-framework

我已经使用EF 6.0和SQL Server Compact 4.0数据库编写了一个应用程序。当客户第一次使用此应用程序时,它(应用程序)应该在给定路径中创建具有一些初始值的数据库文件。此外,还应允许迁移,因为很可能对象模型可能会随着应用程序的未来版本而改变。

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

  1. 我可以使用初始值创建一个DB文件,只需在安装过程中将其复制到正确的位置,然后在应用程序中使用MigrateDatabaseToLatestVersionInitializer。

  2. 在DbContext-Constructors(我有两个上下文)中,我可以检查现有的DB文件并相应地使用不同的Database-Initializers。就像CreateDatabaseIfNotExistsInitializer一样,如果没有找到fiel,则使用种子方法创建初始数据;如果存在DB文件,则使用MigrateDatabaseToLatestVersionInitializer。

  3. 我总是可以使用MigrateDatabaseToLatestVersionInitializer并在其“种子”方法中检查现有的表条目,如果它们不存在则创建它们。

  4. 哪种方式更受欢迎,还是有更好的方式我没有想到?

1 个答案:

答案 0 :(得分:1)

听起来这是一个桌面应用程序,因此您可能希望捕获有关在安装时(即选项1)而不是运行时创建数据库文件的权限错误,尤其是在选项2中,数据库初始化不是命令式命令你给的是你可以尝试一下......抓住它。

我认为选项3不会起作用,因为Seed方法在所有迁移之后都会运行,因此迁移肯定会成功运行,在这种情况下表不需要创建,否则它们将失败数据库不存在,因此您的Seed方法将无法运行。