Есть ли библиотека для использования Linq для прямого запроса к базам данных, динамически? - PullRequest
3 голосов
/ 27 июля 2010

Мне нужно решить очень динамическую проблему с SQL Server. Я разрабатываю инструмент, который проверяет соответствие данных в нескольких базах данных. [ПРИМЕЧАНИЕ: требования к этому проекту довольно строги]

Мне нужно создать инструмент C #, который позволит пользователю выбрать любую базу данных из динамического списка, а затем позволит пользователю выбрать таблицу (выступающую в качестве источника БД / таблицы). Как только это будет сделано, пользователь снова сделает это для другой базы данных и таблицы (или нескольких таблиц в качестве места назначения)

После выбора источника и пункта назначения пользователь может выбрать, какие поля отображать на какие другие поля.

Наконец, программе необходимо циклически перебрать записи в исходной таблице и найти все подходящие ключи в целевой таблице. Нужно проверить такие вещи, как совпадение только одного ключа, все остальные сопоставленные поля имеют одинаковые данные и т. Д ...

Я хотел бы использовать Linq в своем коде и просто передать строки для полей / таблиц, с которыми я запускаю эту базовую логику. Проблема в том, что базы данных и схема неизвестны во время компиляции.

Я ищу направление по этому вопросу. Я не могу найти решение. Самое близкое, что я нашел, - это динамическая библиотека Linq-to-sql, которая там есть. Но это только в рамках вашей модели данных. Я даже не могу иметь модель данных.

Я думал о том, чтобы отбросить всю вещь Linq вместе, просто написать свой собственный быстрый и грязный метод цепочки, чтобы сгенерировать базовый SQL, который мне нужен (в основном, причудливый построитель строк).

1 Ответ

3 голосов
/ 27 июля 2010

Я не думаю, что Linq-to-SQL очень хорошо подходит для этой задачи.L2S отлично справляется с получением ваших бизнес-объектов из базы данных и их обновлением - по одному (или нескольким) за раз.

Я не думаю, что использование Linq-to-SQL принесет вам большую пользу в этом случае,где вы действительно имеете дело с метаданными о рассматриваемых базах данных и таблицах.В этом случае вы можете либо использовать прямой SQL и ADO.NET (предпочтительно SqlDataReader) для запроса представлений системного каталога (например, sys.tables, sys.columns и т. Д.), Либо вы можете подумать об использовании SQL Server Management Objects (SMO)библиотека, чтобы получить доступ к внутренностям ваших серверов SQL.

В любом случае, вы, вероятно, в конечном итоге получите списки объектов, которые вы собрали самостоятельно из кусочков - и, конечно, вы можете использоватьLinq-to-Objects в этих списках и коллекциях в памяти, без проблем.

Некоторые ресурсы для проверки:

...