C# 使用.NET CORE和EF从165个数据库中获取具有30个不同DB模式的用户列表

C# 使用.NET CORE和EF从165个数据库中获取具有30个不同DB模式的用户列表,c#,entity-framework,asp.net-core,asp.net-web-api,entity-framework-core,C#,Entity Framework,Asp.net Core,Asp.net Web Api,Entity Framework Core,我正在构建一个API,它将从165个数据库中获取用户列表,其中包含30个不同的DB模式 有些表可能有不同的名称,如表User,它可以命名为User、Users、AspNetUsers、ApplicationUser 某些表中的字段可能具有不同的名称,即使它们包含相同的信息。和列UserId一样,它可以在不同的模式中命名为UserId、user\id、uid、id 我想从所有数据库中获取所有usersC属性的列表:UserId,UserName,我怎样才能达到这个目的 目前,我的应用程序仅连接到一

我正在构建一个API,它将从165个数据库中获取用户列表,其中包含30个不同的DB模式

有些表可能有不同的名称,如表User,它可以命名为User、Users、AspNetUsers、ApplicationUser

某些表中的字段可能具有不同的名称,即使它们包含相同的信息。和列UserId一样,它可以在不同的模式中命名为UserId、user\id、uid、id

我想从所有数据库中获取所有usersC属性的列表:UserId,UserName,我怎样才能达到这个目的


目前,我的应用程序仅连接到一个具有标准推荐配置的数据库。

要查询具有30种不同DB模式的165个数据库,首先要考虑的是性能。你需要一个革命性的解决方案

我有过为分布式应用程序处理超繁重查询的经验:

当我们将一个请求发送到一个APILet时,我们简单地称之为GetUserScont,API将简单地发送许多子请求。在您的例子中,有165个请求发送到其他具有并行任务的API,那么API GetUserScont将把所有结果都包含在响应中。因此,API GetUserScont不执行任何查询,只执行concat结果。通过这种方式,我们将响应时间从5-10分钟缩短为1秒。因此,您需要添加一个层,该层应该是API后面的另一个restful API,该层将只使用EF核心查询一个特定的数据库

但就你而言,我想知道你的结果有多大?您会对结果进行排序/分组/分页吗?但它也可以通过更详细的设计来解决

但是,如果您只有几个DBs,比如2-3个DBs,我建议a使用a将所有几个表合并到一个视图中,然后使用a可视化地操作结果。2种选择:

使用EF Core code first方法创建当前连接数据库的视图,然后作为表访问该视图。跟随被引用的帖子,你会到达它。 如果允许将视图同步到所连接数据库的一个唯一表,请使用Trigger。当数据不是很大,并且必须对结果进行分组、排序和分页时,这是最好的。
您确定要为此使用EF吗?对于任何ORM来说,这似乎都是一个棘手的问题。无论如何,听起来您需要某种“翻译”层,它知道特定数据库使用什么表和列名。也许在数据库级别可以做得更好。如果您的数据库系统可以为许多不同的表创建一个视图,并从该视图中进行选择,则可以编写一个脚本,为所有30个不同的数据库创建代码。创建的代码对于每个数据库都是唯一的。然后使用该代码。换句话说,脚本将计算出字段名和表名,并为每个字段名和表名编写一个select查询。或者只为每一个db编写代码,30不是那么多。EF是这种工作最不需要考虑的工具。使用整洁。它关闭的原因之一是这里有太多未知的东西。比如,是否有一些连接字符串的集合?是否预先知道哪个数据库有哪个模式,或者代码应该首先嗅出它?是否有混合的数据库提供程序?显然,这并不像对每个数据库运行30个预制查询中的一个那么简单。OP似乎在寻找更先进的东西。看到第一次尝试将有助于了解OP的发展方向。谢谢大家,我在数据库层处理了数据库的差异,并使用了Dapper而不是EF。