SQL Metal для определенных таблиц или другой способ обновить / добавить таблицу в файл.dbml

У кого-нибудь есть простой способ сделать это в Visual Studio, без использования обозревателя сервера?

Я пытался также смотреть на макро, но запись только производит

  Sub TemporaryMacro()
  End Sub

Так что не повезло.

Есть ли способ написать это?

3 ответа

Решение

SqlMetal Include работал как шарм для меня. Сначала создайте полный dbml-файл, используя SqlMeta - скажем, testComplete.dbml

Теперь предоставьте этот файл в качестве входных данных для SqlMetaInclude SqlMetalInclude /dbml:"testComplete.dbml" /output:"testSubSet.dbml" /include:dbo.SampleTable1=SampleTable1,dbo.SampleTable2=SampleTable2

Обратите внимание, что этот инструмент имеет графический интерфейс, который может обрабатывать весь процесс.

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

  1. Иметь SQLMetal и SQLMetalInclude (вам, возможно, придется загружать и создавать из исходного кода) доступ из текущего каталога (или по пути)
  2. Создайте файл selectedEntities.txt с именем таблицы / представления в каждой строке. Эти таблицы будут единственными, для которых генерируется код.
  3. Изменить, сохранить и выполнить пакетный код Generate.bat
  4. (Необязательно) Добавьте файл.bat в качестве инструмента внешнего запуска в Visual Studio, как описано здесь.

Generate.bat:

sqlmetal /conn:"Data Source={Hostname};Initial Catalog={DBName};User ID={Username};Password={Password}" /dbml:temp.dbml /views

setlocal EnableDelayedExpansion
set file=chosenEntities.txt
set include=
FOR /F %%i IN (%file%) DO (
set include=!include!%%i,
)
set include=%include:~0,-1%

sqlmetalinclude -dbml:temp.dbml -output:ChosenEntities.dbml -include:%include%

sqlmetal /context:CustomDataContext /pluralize /namespace:MyNamespace.DB /language:csharp /code:DBEntities.cs /entitybase:DBEntityBase ChosenEntities.dbml

пример selectedEntities.txt:

Accounts
Customers
PRODUCTS_VIEW
AnotherTable

Объяснение:

  1. Промежуточный файл.dbml генерируется sqlmetal как обычно. Созданный dbml-файл содержит определения для каждой таблицы в базе данных (и представления, если они выбраны)
  2. Следующий блок кода перебирает selectedEntities.txt, и к каждой строке добавляется содержимое строки (имя таблицы) плюс запятая ','
  3. Последняя запятая удаляется
  4. Запустите sqlmetalinclude, которое в основном создает копию исходного файла temp.dbml, но только с указанными вами таблицами. Доступны и другие варианты, например преобразование имен отдельных таблиц.
  5. sqlmetal запускается второй раз, на этот раз генерируя фактический код.cs на основе сокращенного файла.dbml.

Существует одна хорошая утилита, которая поможет вам обновить существующие файлы DBML из базы данных: инструменты Huagati DBML/EDMX.

Это не бесплатно, но стоит вложений для любой серьезной разработки Linq-to-SQL.

Единственная альтернатива - написать ее самостоятельно - прочитать структуру базы данных и сравнить ее с представлением XML в DBML, а также обновить DBML по мере необходимости.

Другие вопросы по тегам