部署EF控制数据库的策略



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

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

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

  2. 在DbContext构造函数(我有两个上下文)中,我可以检查现有的DB文件,并相应地使用不同的数据库初始化器。类似于CreateDatabaseIfNotExistsInitializer,如果找不到字段,则使用种子方法创建初始数据,如果DB文件存在,则使用MigrateDatabaseToLatestVersionInitializer。

  3. 我可以始终使用MigrateDatabaseToLatestVersionInitializer,并在其"种子"方法中检查现有表项,如果它们不存在,则创建它们。

以下哪种方式是首选,还是有我没有想到的更好的方式?

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

我认为选项3不会在所有迁移后运行Seed方法时起作用,所以迁移肯定会成功运行,在这种情况下不需要创建表,或者由于DB不存在而失败,因此您的Seed方法不会运行。

最新更新