【问题标题】:Entity Framework set database schema depending on deployment environment实体框架根据部署环境设置数据库架构
【发布时间】:2012-05-29 06:57:01
【问题描述】:

我开发的应用程序部署到严苛的环境(开发、测试、登台、生产)。

在开发过程中,我从现有的开发数据库创建了实体模型。一切正常,但是当我想将应用程序放到测试环境中时,我意识到以下问题:

数据库的结构在所有环境中都是相同的,但数据库架构会因环境而异。例如,每个数据库中都有一个Customers 表。在我的本地开发机器上,它具有模式 dbo ([dbo].[Customers]),但在测试环境中,模式是测试 ([test].[Customers]),而模式在暂存环境中是 stag ([stag].[Customers]) 等等。

所以当我在测试环境中部署应用程序时,它没有从数据库中获取任何数据,因为实体框架希望在[dbo].[Customers] 中找到数据但没有这样的表,只有一个[test].[Customers] .

我知道,我可以定义一个 schema other than dbo,但这对我没有帮助,因为我需要一个不同的架构,具体取决于部署环境。

有什么建议吗? 不知何故,我想我最终会要求我的数据库管理员在每个环境中的每个数据库中将架构更改为 dbo...

【问题讨论】:

  • 无论如何,后一种选择是最好的,因为有一天您可能希望将模式用于其他目的,例如分离数据模型的逻辑部分。在查询中使用时,UDF 必须以它们的模式名称作为前缀。编写使用 UDF 的存储过程时相当麻烦。

标签: entity-framework entity-framework-4 schema database-schema


【解决方案1】:

如果您首先使用代码,则必须使用来自链接问题的流畅 API 方法并从配置文件加载当前架构(您必须在每次部署时修改配置)。

如果您将 ObjectContext 与 EDMX 一起使用,则可以使用 Model adapter。与 DbContext 一起使用的其他方法是将 EF 元数据存储在文件中并执行一些代码,这些代码将在应用程序启动时更改 ssdl 文件中的架构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2012-09-29
    • 2017-01-23
    • 2014-01-30
    • 2021-12-26
    相关资源
    最近更新 更多