Лучший способ обновить классы LINQ to SQL после изменения схемы базы данных - PullRequest
75 голосов
/ 02 сентября 2008

Я использую классы LINQ to SQL в проекте, где дизайн базы данных все еще находится в движении.

Существует ли простой способ синхронизации классов со схемой или мне нужно вручную обновлять классы, если изменяется дизайн таблицы?

Ответы [ 7 ]

64 голосов
/ 02 сентября 2008

Вы можете использовать SQLMetal.exe для создания вашего dbml и / или cs / vb файла. Используйте сценарий предварительной сборки, чтобы запустить его и указать целевой каталог, к которому относится ваш проект 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>
17 голосов
/ 02 сентября 2008

Я сам не пробовал, но Huagati DBML / EDMX Tools рекомендуют другие люди.

Huagati DBML / EDMX Tools - это надстройка для Visual Studio, который добавляет функциональность для Linq2SQL / DBML дизайнер диаграмм в Visual Studio 2008, и для объекта ADO.NET Конструктор фреймворков в Visual Studio 2008 SP1. Надстройка добавляет новое меню варианты обновления дизайнера Linq2SQL диаграммы с изменениями базы данных, для переименование Linq-to-SQL (DBML) и EF (EDMX) классы и свойства для использования Соглашения об именах .net и для добавление документации / описаний к Linq-to-SQL сгенерированные классы из свойства базы данных.

Screenshot of DBML Tools

8 голосов
/ 03 февраля 2014

Это простое исправление без какого-либо дополнительного программного обеспечения, которое просто работает для простых изменений (таких как добавленные поля, несколько таблиц и т. Д.).

Инструкция:

  • Вы перетащите копию измененной таблицы в конструктор (будет удален позже)
  • Теперь выберите все новые (или измененные) поля и (right-click ->) copy
  • В исходной таблице щелкните правой кнопкой мыши и insert их (сначала удалите измененные поля)
  • Теперь удалите таблицу, из которой вы их скопировали

Я знаю, что это довольно очевидно, но как-то не интуитивно понятно, и это мне очень помогло, поскольку все нужные атрибуты и типы будут скопированы, а все ссылки останутся нетронутыми. Надеюсь, это поможет.

Когда использовать:

Конечно, это, как уже было сказано, для небольших изменений, но, безусловно, лучше, чем ручная замена таблиц множеством ссылок или когда вам не нужна вся структура базы данных, сгенерированная SQLMetal. Например, когда у вас есть большое количество таблиц (например, SAP), или когда используются перекрестные таблицы из разных баз данных.

5 голосов
/ 21 октября 2008

DamienG написал несколько t4 шаблонов , которые могут заменить часть того, что VS генерирует для вас. Они могут быть перезапущены в любое время с помощью инструмента командной строки.

Шаблоны T4 имеют дополнительное преимущество: они доступны для редактирования. Это позволяет вам настроить то, что генерируется для вашего сердца.

4 голосов
/ 02 сентября 2008

Я думаю, что Джефф недавно пожаловался на это. Один из распространенных приемов - снова перетащить все объекты в дизайнер ...

Надеюсь, кто-то другой подойдет лучше!

1 голос
/ 28 ноября 2008

Я написал инструмент для внесения изменений в сценарии Dbml, см. http://code.google.com/p/linqtodbmlrunner/ и мой блог http://www.adverseconditionals.com

0 голосов
/ 27 июня 2017

Как насчет изменения свойств объекта / таблицы в области дизайна DataContext в Visual Studio?

Например, если я добавил столбец в таблицу SQL Server:

  1. Откройте файл * .dbml.
  2. Щелкните правой кнопкой мыши объект и выберите Добавить> Свойство.
  3. Заполните значения в окне «Свойства» для нового столбца.
  4. Создайте свое решение.

Автоматически сгенерированные классы моделей должны отражать добавленный новый столбец.

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...