Entity framework EF控制数据库的部署策略

Entity framework EF控制数据库的部署策略,entity-framework,Entity Framework,我已经使用EF6.0和SQL Server Compact 4.0数据库编写了一个应用程序。当客户第一次使用此应用程序时,它(应用程序)应该在给定路径中创建一个具有一些初始值的数据库文件。此外,还应允许迁移,因为对象模型很可能随应用程序的未来版本而更改 现在我想知道在用户生产系统上部署DB的最佳方式是什么。我可以想出三种方法: 我可以用初始值创建一个DB文件,然后在安装过程中将其复制到正确的位置,并在应用程序中使用MigrateDatabaseToLatestVersionInitializer

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

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

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

  • 在DbContext构造函数(我有两个上下文)中,我可以检查现有的DB文件并相应地使用不同的数据库初始值设定项。与CreateDatabaseIfNotExistsSinializer类似,它具有一个种子方法,如果找不到fiel,则创建初始数据;如果DB文件存在,则具有一个MigratedDatabaseToLateStVersionInitializer

  • 我可以始终使用MigrateDatabaseToLatestVersionInitializer,并在其“Seed”方法中检查现有的表条目,如果它们不存在,则创建它们


  • 以下哪种方法是首选的,或者有没有我没有想到的更好的方法?

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


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

    当然,你是对的,方法根本不起作用,因为MigrateToLatestDatabase初始值设定项需要一个现有数据库,或者可能需要我假设的migrationhistory表。我想我会坚持方法一。