Лучший способ обновить классы LINQ to SQL после изменения схемы базы данных
Я использую классы LINQ to SQL в проекте, где дизайн базы данных все еще немного изменен.
Есть ли простой способ синхронизации классов со схемой или мне нужно вручную обновлять классы при изменении дизайна таблицы?
Ответы
Ответ 1
Вы можете использовать SQLMetal.exe для генерации вашего файла dbml и /cs/vb. Используйте pre-build script, чтобы запустить его и настроить таргетинг на каталог, к которому принадлежит ваш проект datacontext.
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sqlmetal.exe
/server:<SERVER>
/database:<database>
/code:"path\Solution\DataContextProject\dbContext.cs"
/language:csharp
/namespace:<your namespace>
Ответ 2
Я не пробовал это сам, но Huagati DBML/EDMX Tools рекомендуется другими людьми.
Huagati DBML/EDMX Tools - надстройка для Visual Studio, которая добавляет функциональность для Linq2SQL/DBML дизайнера диаграмм в Visual Studio 2008, и для ADO.NET Entity Дизайнер Framework в Visual Studio 2008 SP1. Надстройка добавляет новое меню варианты обновления конструктора Linq2SQL диаграмм с изменениями базы данных, для переименование Linq-to-SQL (DBML) и EF (EDMX) и свойства для использования .net, и для добавление документации/описаний в Сгенерированные классы Linq-to-SQL из свойства базы данных.
![Screenshot of DBML Tools]()
Ответ 3
Вот простое исправление без какого-либо дополнительного программного обеспечения, которое просто работает для простых изменений (например, добавленных полей, нескольких таблиц и т.д.).
Инструкция:
- Вы вытаскиваете копию измененной таблицы в конструктор (будет удален позже)
- Теперь выберите все новые (или измененные) поля и (
right-click ->
) copy
- В исходной таблице щелкните правой кнопкой мыши и
insert
их (сначала удалите измененные поля).
- Теперь удалите таблицу, которую вы скопировали из
Я знаю, что это явно очевидно, но почему-то неинтуитивно, и это очень помогло мне, поскольку все нужные атрибуты и типы будут скопированы, а все ссылки останутся нетронутыми. Надеюсь, что это поможет.
Когда использовать:
Конечно, это - как сказано - для небольших изменений, но, безусловно, лучше, чем ручная замена таблиц многими ссылками, или когда вам не нужна вся ваша структура базы данных, сгенерированная SQLMetal. Например, когда у вас большое количество таблиц (например, SAP) или при использовании сшитых таблиц из разных баз данных.
Ответ 4
DamienG написал несколько t4 templates, которые могут заменить некоторые из того, что VS генерирует для вас. Их можно повторно запускать, когда захотите, с помощью инструмента командной строки.
Шаблоны T4 имеют дополнительное преимущество при редактировании. Это позволяет вам настроить то, что генерируется для вас, содержание сердец.
Ответ 5
Я думаю, что Джефф недавно жаловался на это. Один из распространенных способов - снова перетащить все объекты в конструктор...
Надеюсь, что кто-то еще купит лучший подход!
Ответ 6
Я написал инструмент для внесения изменений script в сценарии Dbml, см. http://code.google.com/p/linqtodbmlrunner/ и мой блог http://www.adverseconditionals.com
Ответ 7
Как изменить свойства объекта/таблицы на поверхности дизайна DataContext в Visual Studio?
Например, если я добавил столбец в таблицу SQL Server:
- Откройте файл *.dbml.
- Щелкните правой кнопкой мыши объект и выберите Добавить > Свойство.
- Заполните значения в окне свойств нового столбца.
- Создайте свое решение.
Автогенерируемые классы моделей должны отражать новый столбец, который был добавлен.
![введите описание изображения здесь]()
![введите описание изображения здесь]()