Я использую пакетный скрипт, подобный этому, для управления обновлением моих моделей при изменении базовых таблиц / представлений. Чтобы использовать это:
- Иметь SQLMetal и SQLMetalInclude (возможно, вам придется загружать и создавать из исходного кода) доступ из текущего каталога (или по пути)
- Создайте файл selectedEntities.txt с именем таблицы / представления в каждой строке. Эти таблицы будут единственными, для которых генерируется код.
- Изменить, сохранить и выполнить код пакета Generate.bat
- (Необязательно) Добавьте файл .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
Объяснение:
- Промежуточный файл .dbml генерируется sqlmetal как обычно. Созданный dbml-файл содержит определения для каждой таблицы в базе данных (и представления, если они выбраны)
- Следующий блок кода циклически перебирает selectedEntities.txt, и к каждой строке добавляется содержимое строки (имя таблицы) плюс запятая ','
- Последняя запятая удаляется
- Запустите sqlmetalinclude, которое в основном создает копию исходного файла temp.dbml, но включает только указанные вами таблицы. Доступны и другие параметры, например преобразование имен отдельных таблиц
- sqlmetal запускается второй раз, на этот раз генерируется фактический код .cs на основе сокращенного файла .dbml.