Как обновить файл Linq to SQL dbml? - PullRequest
192 голосов
/ 10 июля 2009

Как обновить файл Linq to SQL .dbml?

Ответы [ 7 ]

243 голосов
/ 10 июля 2009

Существует три способа синхронизации модели.

  1. Удалите измененные таблицы из конструктора и перетащите их обратно на поверхность конструктора из проводника баз данных. Я обнаружил, что для надежной работы необходимо:

    а. Обновите схему базы данных в проводнике баз данных (щелкните правой кнопкой мыши, обновите)
    б. Сохранить конструктор после удаления таблиц
    с. Сохраните снова после перетаскивания таблиц назад.

    Примечание , хотя, если вы изменили какие-либо свойства (например, отключили дочернее свойство ассоциации), эти изменения, очевидно, потеряют эти изменения & mdash; вам придется делать их снова.

  2. Используйте SQLMetal для регенерации схемы из вашей базы данных. Я видел несколько постов в блоге, которые показывают , как написать скрипт .

  3. Вносить изменения непосредственно в панели свойств DBML. Это работает для простых изменений, например, допускает пустые значения в поле.

Конструктор DBML не устанавливается по умолчанию в Visual Studio 2015, 2017 или 2019. Вам придется закрыть VS, запустить установщик VS и изменить установку. Инструменты LINQ to SQL - это функция, которую вы должны установить. Для VS 2017/2019 вы можете найти его в Отдельные компоненты> Инструменты кода .

47 голосов
/ 02 сентября 2015

Чтобы обновить таблицу в .dbml-диаграмме, например, добавив столбцы, сделайте следующее:

  1. Обновите окно проводника SQL Server.
  2. Перетащите «новую» версию вашей таблицы в .dbml-диаграмму (report1 на рисунке ниже).

report1 is the new version of the table

  1. Отметьте добавленные столбцы в новой версии таблицы, нажмите Ctrl + C , чтобы скопировать добавленные столбцы.

copy the added columns

  1. Щелкните «старую» версию таблицы и нажмите Ctrl + V , чтобы вставить добавленные столбцы в уже существующую версию таблицы.

paste the added columns to the old version of the table

5 голосов
/ 10 июля 2009

Вы также можете проверить PLINQO набор шаблонов генерации кода, основанных на CodeSmith, которые позволяют вам делать много полезных вещей для и с Linq-to-SQL:

  • создать один файл для каждого класса (вместо одного огромного файла)
  • при необходимости обновите модель
  • много других функций

Посетите сайт PLINQO по адресу http://www.plinqo.com и посмотрите вступительные видеоролики.

Второй известный мне инструмент Huagati DBML / EDMX , который позволяет обновлять файлы отображения DBML (Linq-to-SQL) и EDMX (Entity Framework) и многое другое (например, соглашения об именах). и др.).

Марк

4 голосов
/ 28 января 2011

Мы используем специально написанный шаблон T4, который динамически запрашивает модель information_schema для каждой таблицы во всех наших файлах .DBML, а затем перезаписывает части файла .DBML свежей информацией о схеме из базы данных. Я очень рекомендую внедрить подобное решение - оно сэкономило мне кучу времени, и в отличие от удаления и повторного добавления таблиц в модель, вы сохраняете ассоциации. С этим решением вы получите ошибки во время компиляции, когда ваша схема изменится. Вы хотите убедиться, что используете систему контроля версий, потому что diffing действительно удобен. Это отличное решение, которое хорошо работает, если вы разрабатываете сначала схему БД. Конечно, я не могу поделиться кодом своей компании, так что вы сами пишете это. Но если вы знаете какой-нибудь Linq-to-XML и можете пойти в школу по этому проекту , вы можете добраться туда, где хотите.

2 голосов
/ 10 июля 2009

Есть нюанс обновления таблиц и последующего обновления DBML ... Связи с внешним ключом не всегда переносятся сразу, если в существующие таблицы вносятся изменения. Обходной путь - сделать сборку проекта, а затем снова добавить таблицы. Я сообщил об этом MS, и это исправлено для VS2010.

На дисплее DBML не отображаются новые ограничения внешнего ключа


Обратите внимание, что инструкции, приведенные в основном ответе, не ясны. Для обновления таблицы

  1. Раскройте поверхность конструктора dbml
  2. Выберите все таблицы с помощью Правая-> Нажмите-> Выбрать все или CTRL a
  3. CTRL x (вырезать)
  4. CTRL v (Вставить)
  5. Сохраните и восстановите решение.
2 голосов
/ 10 июля 2009

Я бы порекомендовал использовать визуальный конструктор, встроенный в VS2008, поскольку обновление dbml также обновляет код, сгенерированный для вас. Изменение dbml вне визуального конструктора приведет к несинхронизации базового кода.

0 голосов
/ 04 апреля 2017

В случае обновления хранимой процедуры вы должны удалить ее из файла .dbml и заново вставить ее. Но если хранимая процедура имеет два пути (например: если что-то; отображать некоторые столбцы; еще отображать некоторые другие столбцы), убедитесь, что два пути имеют одинаковые псевдонимы столбцов !!! В противном случае будут существовать только первые столбцы пути.

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