【发布时间】:2020-01-03 10:58:13
【问题描述】:
我正在构建一个 API,它将从 165 个具有 30 种不同数据库架构的数据库中获取用户列表。
有些表可能有不同的名称,比如表User,它可以命名为User、Users、AspNetUsers、ApplicationUser。
某些表中的字段可能具有不同的名称,即使它们包含相同的信息。如列UserId,可以在不同的架构中命名为userId、user_id、uid、id。
我想从所有数据库中获取所有用户的列表(C# 属性:UserId,UserName),我怎样才能做到这一点?
目前,我的应用仅使用标准推荐配置连接到一个数据库。
【问题讨论】:
-
您确定要为此使用 EF 吗?对于任何 ORM 来说,这似乎都是一个棘手的问题。无论如何,听起来您需要某种“翻译”层,它知道用于特定数据库的表和列名。
-
也许这可以在数据库级别做得更好。如果您的数据库系统supports the concept 您可以为许多不同的表创建一个视图并从该视图中选择
-
编写一个脚本,为所有 30 个不同的数据库创建代码。创建的代码对于每个数据库都是唯一的。然后使用该代码。换句话说,脚本会计算出字段名、表名并为每个字段编写一个选择查询。或者只是为每个db写代码,30个也不算多。
-
EF 是为此类工作想到的最后一个工具。使用 Dapper。
-
关闭的原因之一是这里有太多的未知数。比如,是否有一些连接字符串的集合?是否事先知道哪个数据库具有哪个模式,或者代码应该先嗅出它?数据库提供者是否混合在一起?显然,这并不像对每个数据库运行 30 个预制查询中的一个那么简单。 OP 似乎在寻找更高级的东西。看到第一次努力将有助于了解 OP 的发展方向。
标签: c# entity-framework asp.net-core asp.net-web-api entity-framework-core