Есть ли способ добавить таблицу в dbml Linq-to-SQL в C #?

#c# #.net #linq-to-sql #scripting #dynamic

#c# #.net #linq-to-sql #сценарии #динамический

Вопрос:

Я работаю над некоторыми сценариями, и мне было интересно, знает ли кто-нибудь способ динамического добавления таблицы из базы данных MSSQL в файл dbml, точно так же, как если бы нужно было сделать это обычным способом «drag-n-drop». Есть ли что-нибудь в фреймворке, что позволяет это?

Обновить:

У меня есть имя таблицы, которая существует в моей базе данных. Если бы пришло время разработки, я мог бы перетащить таблицу из проводника сервера и поместить ее в конструктор Linq — to -SQL, который добавил бы этот класс. Я хочу посмотреть, есть ли способ сделать это во время выполнения в коде. Это вполне может быть невозможно, но это было бы очень полезно для целей написания сценариев.

Комментарии:

1. Каким образом динамически? Что вы пытаетесь сделать?

2. Это невозможно с помощью SQLMetal, который использует разработчик. Я бы рекомендовал вам попробовать sqlmetalinclude.codeplex.com .

3. Из любопытства, какой синтаксис вы ожидали?

4. @alexn: Если я правильно понимаю, суть OP в том, что он не знает схему во время разработки или компиляции. В этом случае изменение физического файла .dbml не принесет большой пользы, поскольку объекты будут уже определены и скомпилированы.

5. @Adam — Я подумал, что если есть какой-то способ сделать это, это может быть в форме какого-то вызова API для модуля Linq-to-SQL. Это был рискованный шаг.

Ответ №1:

Нет, это невозможно; цель LINQ-to-SQL (и аналогичных ORM, таких как Entity Framework) — предоставить вам строго типизированный механизм для запросов и обновления вашей базы данных. Если схема неизвестна вам во время компиляции, то к ней невозможно выполнить запрос, поскольку вы не смогли написать код для этого (LINQ-to-SQL только допускает выражение и синтаксис LINQ; вы не можете вручную создать строку запроса).

Если ваша схема неизвестна вам во время компиляции, вам лучше использовать обычный ADO.NET DbConnection и DbCommand объекты для выполнения ваших манипуляций с данными.

Комментарии:

1. Знаете ли вы, будет ли иметь какое-либо значение динамический Linq, в котором вы можете вручную создать строку запроса?

2. @Prof Plum: Возможно, если бы существовал какой-то способ модифицировать .dbml во время выполнения, но я все еще спрашиваю: почему? Если вам приходится кодировать строку самостоятельно, какую выгоду дает вам LINQ-to-SQL? Почему бы просто не использовать соединение и не создать команду самостоятельно?

3. Я работаю с довольно большой базой данных с несколькими тысячами таблиц, но все они имеют схожую структуру. Мне надоело интегрировать каждую из них по отдельности, поэтому я написал скрипт, который в основном предоставит мне некоторые строительные леса для интеграции каждой новой таблицы. Теперь все это можно сделать за один простой шаг, за исключением добавления класса Linq-to-SQL. На самом деле это не имеет большого значения, но было бы неплохо написать сценарий и для этого.

4. @ProfPlum: Я не думаю, что мне ясно, что вы делаете, вы пытаетесь написать сценарий модификации файла .dbml для проекта до времени компиляции или после времени компиляции?

5. Если я правильно понимаю ваш вопрос, это будет раньше. Будет запущен скрипт, который изменит исходный код другого нескомпилированного проекта, находящегося в разработке. Это автоматически генерирует некоторый код для проекта. Это не предназначалось бы для внесения изменений в действующую систему, а вместо этого является просто инструментом разработки.