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

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

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

  Sub TemporaryMacro()
  End Sub

Так что нетудачи там.

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

Ответы [ 3 ]

3 голосов
/ 18 марта 2013

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

  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.
2 голосов
/ 27 ноября 2010

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

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

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

2 голосов
/ 18 июля 2010

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

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

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

...