多个数据库,模型略有变化。如何允许`EF`在运行时使用不同的数据库结构?

时间:2016-06-21 08:52:20

标签: c# .net sql-server oracle entity-framework

我正在使用EF6MSSQLOracle.NET4.5在全公司(多个部门)全球使用的系统上查询属于的不同数据库我们的部门大多数都是EF模型,有些数据库是Oracle,有些数据库是Microsoft SQL,有些是开发或者是uat,有些是日志。

我为EFOracle数据库使用了不同的MSSQL模型。

一个要求是在运行时在数据库之间切换,这很容易,

public AggregatorEntities(string connectionString) : base(connectionString) { }

然而它确实有副作用 - 许多数据库(dev,uat,dr,logs,...)与Live不同(模型是从Live生成的),这在查询这些数据库时会导致错误。

管理层了解情况,他们可以在某个特定数据库上工作的开发人员对全局查询系统进行更改,以便测试人员和uat查询数据。但是,他们希望进行更改,以便花费最少的时间来完成此操作 - 因为每个涉及数据库更改的项目都需要额外的成本。我基本上需要构建一个“可以处理所有”的弹性系统,当一个人在EF中更改数据库时,会做一些事情来适应特定的数据库。

有不同的失败情况:
1.表上列的名称相同但实体中的类型不同 2.表格中没有列,但EF中有一个实体 3.表格上不在EF上的其他栏目 4.数据库中不在EF模型中的附加表
5.数据库中没有表,但EF模型中有实体。

我做了一些思考,这个问题很广泛,可能因为同样的原因而被关闭。但是我不确定是否值得将问题分成每个场景,因为它取决于答案。我理解如果单个答案可以回答所有要点然后不需要分裂,但是如果每个情况都有不同的“治愈”,那么问题应该仅针对该部分进行分割,但没有答案也无法知道....(捕获22 )。

我看到ATM的唯一选择是为每个镜像数据库生成自己的模型,但最终我得到了50多个模型。

如何在运行时允许EF使用不同的数据库结构?

1 个答案:

答案 0 :(得分:0)

This now officially cannot be done in a proper manner时,如何在地址栏中隐藏网址。

然而,能够在具有相似结构的不同数据库之间切换的最终结果仍然可以实现(对于那些没有道德的人)。 Part with removing columns can used

解决方案是拥有从数据库生成的所有包含EF模型,该模型包含所有表和所有列(在任何数据库中都像所有内容的逻辑OR一样)。然后,可以删除具有来自所有数据库环境的所有属性的所有实体的模型,特定于在运行时in mechanism described here查询的环境。这不包括列类型更改的情况。

希望这可以为您节省一些时间,因为我花了两周的时间......