我开发的应用程序部署到严苛的环境(开发,测试,升级,生产)。
在开发过程中,我从现有的开发数据库中创建了实体模型。一切正常,但是由于我想将应用程序放到测试环境中,我意识到了以下问题:
数据库的结构在所有环境中都是相同的,但数据库架构从环境变为环境。例如,每个数据库中都有一个Customers
表。在我的本地开发机器上,它具有模式dbo([dbo].[Customers]
),但在测试环境中模式是测试([test].[Customers]
),而模式在暂存环境中是停滞不前的([stag].[Customers]
等等。
因此,当我在测试环境中部署应用程序时,它不会从数据库中获取数据,因为实体框架期望在[dbo].[Customers]
中找到数据,但是没有这样的表,只有一个{ {1}}。
我知道,我可以定义schema other than dbo,但这对我没有帮助,因为我需要一个不同的架构,具体取决于部署环境。
有什么建议吗? 不知怎的,我想我会结束,要求我的数据库管理员在每个环境中的每个数据库中将模式更改为dbo ...
答案 0 :(得分:1)
如果您首先使用代码,则必须使用链接问题的流畅API方法并从配置文件加载当前架构(您必须修改每个部署的配置)。
如果您在EDMX中使用ObjectContext,则可以使用Model adapter。与DbContext一起使用的其他方法是将EF元数据存储在文件中并执行一些代码,这些代码将在应用程序启动时更改ssdl文件中的模式。