我开发的应用程序部署到环境(开发、测试、暂存、生产(。
在开发过程中,我从现有的开发数据库创建了实体模型。一切正常,但是当我想将应用程序放到测试环境中时,我意识到了以下问题:
数据库的结构在所有环境中都是相同的,但数据库架构因环境而异。例如,每个数据库中都有一个Customers
表。在我的本地开发机器上,它具有模式dbo([dbo].[Customers]
(,但在测试环境中,模式是测试([test].[Customers]
(,而模式在暂存环境中是雄鹿([stag].[Customers]
(等等。
因此,当我在测试环境中部署应用程序时,它不会从数据库中获取任何数据,因为实体框架希望在[dbo].[Customers]
中找到数据,但没有这样的表,只有一个[test].[Customers]
。
我知道,我可以定义 dbo 以外的架构,但这对我没有帮助,因为我需要根据部署环境使用不同的架构。
有什么建议吗?不知何故,我想我最终会要求我的数据库管理员在每个环境的每个数据库中将架构更改为 dbo......
如果您首先使用代码,则必须使用来自链接问题的流畅 API 方法并从配置文件加载当前架构(您必须修改每个部署的配置(。
如果将 ObjectContext 与 EDMX 配合使用,则可以使用模型适配器。与 DbContext 一起使用的其他方法是将 EF 元数据存储在文件中并执行一些代码,这些代码将在应用程序启动时更改 ssdl 文件中的架构。