我有一个非常动态的SQL Server问题需要解决。我正在开发一个工具来验证多个数据库中的匹配数据。 [注意:此项目的要求非常严格]
我需要创建一个C#工具,让用户从动态列表中选择任何数据库,然后让用户选择一个表(充当源数据库/表)。完成后,用户再次为另一个数据库和表(或多个表作为目标)执行此操作
一旦选择了源和目的地,用户可以选择哪些字段映射到哪些其他字段。
最后,程序需要遍历源表中的记录并找到目标表中的任何匹配键。它需要检查诸如只有一个键匹配,所有其他映射字段具有相同数据等等...
我想在我的代码中使用Linq,只是为我运行此基本逻辑的字段/表传递字符串。问题是数据库&架构在编译时是未知的。
我正在寻找这方面的方向。我似乎无法找到解决方案。我最接近的是那里的动态Linq-to-sql库。但这只是在数据模型范围内的动态。我甚至没有数据模型。
我正在考虑将整个Linq的东西放在一起,只是编写我自己的快速和脏方法链接来生成我需要的基本SQL(基本上是一个花哨的字符串构建器)。
答案 0 :(得分:3)
我不认为Linq-to-SQL非常适合这项任务。 L2S擅长从数据库获取业务对象,并再次更新它们 - 一次一个(或几个)。
我不认为在这种情况下使用Linq-to-SQL会使您受益匪浅,在这种情况下,您真正处理有关数据库和表的元数据。在这种情况下,您可以使用直接SQL和ADO.NET(最好SqlDataReader
)来查询系统目录视图(例如sys.tables
,sys.columns
等等),或者您可以认为关于使用SQL Server Management Objects (SMO)
库来访问SQL Server的内部信息。
无论哪种方式,你可能最终会得到你自己从零碎的部分组装的对象列表 - 当然,你可以在那些内存列表和集合中使用Linq-to-Objects,no问题
要检查的一些资源: