Ответы:
Существует три способа синхронизации модели.
Удалите измененные таблицы из конструктора и перетащите их обратно на поверхность конструктора из проводника баз данных. Я обнаружил, что для надежной работы необходимо:
а. Обновите схему базы данных в Database Explorer (щелкните правой кнопкой мыши, обновите)
b. Сохранить дизайнер после удаления таблиц
c. Сохраните снова после перетаскивания таблиц обратно.
Обратите внимание, что если вы изменили какие-либо свойства (например, отключив дочернее свойство ассоциации), это, очевидно, утратит эти изменения - вам придется их делать снова.
Используйте SQLMetal для регенерации схемы из вашей базы данных. Я видел несколько постов в блоге, которые показывают, как это написать .
Внесите изменения непосредственно в панели свойств DBML. Это работает для простых изменений, таких как разрешение пустых значений в поле.
Конструктор DBML не устанавливается по умолчанию в Visual Studio 2015, 2017 или 2019. Вам придется закрыть VS, запустить установщик VS и изменить установку. Инструменты LINQ to SQL - это функция, которую вы должны установить. Для VS 2017/2019 вы можете найти его в разделе « Отдельные компоненты»> «Инструменты кода» .
Чтобы обновить таблицу в .dbml-диаграмме, например, добавив столбцы, сделайте следующее:
Вы также можете ознакомиться с набором шаблонов генерации кода PLINQO , основанных на CodeSmith, которые позволяют вам делать много полезных вещей для Linq-to-SQL:
Посетите сайт PLINQO по адресу http://www.plinqo.com и посмотрите вступительные видеоролики.
Второй инструмент, который я знаю, это инструменты Huagati DBML / EDMX , которые позволяют обновлять файлы отображения DBML (Linq-to-SQL) и EDMX (Entity Framework) и многое другое (например, соглашения об именах и т. Д.).
Марк
Мы используем специально написанный шаблон T4, который динамически запрашивает модель information_schema для каждой таблицы во всех наших файлах .DBML, а затем перезаписывает части файла .DBML свежей информацией о схеме из базы данных. Я высокорекомендую внедрить подобное решение - оно сэкономило мне кучу времени, и в отличие от удаления и повторного добавления таблиц в модель, вы сохраняете ассоциации. С этим решением вы получите ошибки во время компиляции, когда ваша схема изменится. Вы хотите убедиться, что используете систему контроля версий, потому что diffing действительно удобен. Это отличное решение, которое хорошо работает, если вы разрабатываете сначала схему БД. Конечно, я не могу поделиться кодом моей компании, поэтому вы сами пишете это. Но если вы знаете какой-нибудь Linq-to-XML и можете пойти в школуВ этом проекте вы можете попасть туда, где хотите.
Я бы порекомендовал использовать визуальный конструктор, встроенный в VS2008, так как обновление dbml также обновляет сгенерированный для вас код. Изменение dbml вне визуального конструктора приведет к несинхронизации основного кода.
Есть нюанс обновления таблиц и последующего обновления DBML ... Связи с внешним ключом не всегда переносятся сразу, если в существующие таблицы вносятся изменения. Обходной путь - сделать сборку проекта, а затем снова добавить таблицы. Я сообщил об этом MS, и это было исправлено для VS2010.
Дисплей DBML не показывает новые ограничения внешнего ключа
Обратите внимание, что инструкции, приведенные в основном ответе, не ясны. Обновить таблицу
В случае обновления хранимой процедуры вы должны удалить ее из файла .dbml и заново вставить ее. Но если хранимая процедура имеет два пути (например: если что-то; отображать некоторые столбцы; еще отображать некоторые другие столбцы), убедитесь, что два пути имеют одинаковые псевдонимы столбцов !!! В противном случае будут существовать только первые столбцы пути.
Вот полный пошаговый метод, который работал для меня, чтобы обновить LINQ to SQL dbml и связанные файлы, чтобы включить новый столбец, который я добавил в одну из таблиц базы данных.
Вы должны внести изменения в вашу поверхность дизайна, как предложено другими выше; Тем не менее, вам нужно сделать несколько дополнительных шагов. Это полные шаги:
1. Drag your updated table from Server Explorer onto the design surface
2. Copy the new column from this "new" table to the "old" table (see M463 answer for details on this step)
3. Delete the "new" table that you just dragged over
4. Click and highlight the stored procedure, then delete it
5. Drag the new stored procedure and drop into place.
6. Delete the .designer.vb file in the code-behind of the .dbml
(if you do not delete this, your code-behind containing the schema will
not update even if you rebuild and the new table field will not be included)
7. Clean and Rebuild the solution (this will rebuild the .designer.vb file to include all the new changes!).