Як оновити файл Linq до dbml для SQL?


Відповіді:


258

Існує три способи синхронізації моделі.

  1. Видаліть модифіковані таблиці з конструктора та перетягніть їх на поверхню дизайнера з Провідника баз даних. Я виявив, що для надійної роботи вам потрібно:

    а. Оновіть схему бази даних в Провіднику баз даних (клацніть правою кнопкою миші, оновіть)
    b. Збережіть конструктор після видалення таблиць
    c. Знову збережіть після перетягування таблиць назад.

    Зауважте, що якщо ви змінили будь-які властивості (наприклад, вимкнення дочірньої власності асоціації), це очевидно втратить ці зміни - вам доведеться їх внести знову.

  2. Використовуйте SQLMetal для відновлення схеми з вашої бази даних. Я бачив ряд публікацій в блозі, де показано, як це зробити .

  3. Внесіть зміни безпосередньо на панелі властивостей DBML. Це працює для простих змін, наприклад, дозволяючи нулю на полі.

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


1
Я спробував 1a та 1c без 1b, і отримував помилки "Вказаний актер недійсний" під час виконання простого вибору у поданні. У тому числі 1b зафіксував це для мене
tomfumb

6
Підтримка VS була запропонована на connect.microsoft.com/VisualStudio/feedback/details/260723 / ... , але MS не хоче виправити.
Майкл Фрейджім

Спробував перший метод, і він спрацював. Здогадайтесь, він буде працювати для невеликої БД.
Мухаммед

Мене болить, що наприкінці 2019 року мені була потрібна відповідь, створена ще до того, як я зрозумів, що таке комп’ютерне програмування ... Це так докладно і чудово!
PSGuy

54

Щоб оновити таблицю у .dbml-діаграмі за допомогою, наприклад, доданих стовпців, зробіть це:

  1. Оновіть вікно провідника SQL Server.
  2. Перетягніть "нову" версію таблиці в .dbml-діаграму (report1 на малюнку нижче).

report1 - нова версія таблиці

  1. Позначте додані стовпці в новій версії таблиці, натисніть Ctrl+, Cщоб скопіювати додані стовпці.

скопіюйте додані стовпці

  1. Клацніть «стару» версію таблиці та натисніть Ctrl+, Vщоб вставити додані стовпці у вже наявну версію таблиці.

вставити додані стовпці до старої версії таблиці


4
Це здається найпростішим, найменш руйнівним методом, який не вимагає додаткових інструментів і працює чудово у VS2017
Тобі

1
Це набагато менш нав'язливо, ніж прийнята відповідь і продовжує добре працювати наприкінці 2018 року!
Марк

1
Це найкраща відповідь для швидкого (і не дуже швидкого редагування схеми). Я зайняв багато часу, щоб вигляд моделі виглядав красиво. Я ненавиджу видалення та перетягування файлів оновлення. Для доданих полів це чудово працює!
Хакер

1
Для мене це вирішило дві проблеми. Перший - коли я намагався скопіювати та вставити подібне поле в таблицю, а потім перейменувати її. Це створило невстановлену "неуточнену" помилку збірки під час перевірки. Інша проблема полягала в тому, що якщо я вилучив таблицю, а потім додав її в повному обсязі, це призвело до набагато більших відмінностей у git (оскільки об’єкти були переставлені у файлі). За допомогою цього методу я бачу лише вставлення нового поля, яке набагато чистіше і простіше зрозуміти пізніше.
гуг

BTW, потрібно натиснути "Так", коли це запропонує вам "Об'єкти, які ви додаєте до дизайнера, використовують інше з'єднання для передачі даних, ніж дизайнер ..."
Eitanmg

5

Ви можете також перевірити PLINQO набір шаблонів генерації коду, заснованого на CodeSmith, які дозволяють зробити багато акуратні речі для і з Linq до SQL:

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

Перегляньте сайт PLINQO за адресою http://www.plinqo.com та ознайомтеся із вступними відео.

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

Марк


Щойно вирвавши CodeSmith / PLINQO, я настійно раджу не використовувати цей підхід. Ця відповідь
дала

@Yuck: на даний момент я настійно не рекомендую взагалі використовувати Linq-to-SQL - замість цього використовуйте Entity Framework, набагато кращий вибір!
marc_s

Так. Наступним кроком, який я здійснив, запив стару програму, перейшов до EF після перевірки того, що програма буде працювати з звичайною DBML замість PLINQO.
Юк

4

Ми використовуємо спеціально написаний шаблон T4, який динамічно запитує модель information_schema для кожної таблиці у всіх наших .DBML-файлах, а потім перезаписує частини файлу .DBML зі свіжою інформацією про схему з бази даних. Я високорекомендую реалізувати таке рішення - це заощадило мені час, і на відміну від видалення та повторного додавання ваших таблиць до вашої моделі, ви можете зберегти свої асоціації. За допомогою цього рішення ви отримаєте помилки під час компіляції при зміні схеми. Хочете переконатися, що ви використовуєте систему контролю версій, тому що відрізняти дійсно зручно. Це чудове рішення, яке добре працює, якщо ви розробляєте за допомогою першого підходу схему БД. Звичайно, я не можу поділитися кодом своєї компанії, тому ви самостійно пишете це. Але якщо ви знаєте якийсь Linq-to-XML і можете піти до школи за цим проектом , ви можете дістатися до місця, де ви хочете бути.


2

Я рекомендую використовувати візуальний дизайнер, вбудований у VS2008, оскільки оновлення dbml також оновлює код, який генерується для вас. Змінення dbml поза візуального дизайнера призведе до того, що базовий код не синхронізується.


4
Так, але візуальний дизайнер у VS2008 не може виявити та реагувати на зміни в базовій базі даних :-( Якщо видалити та повторно додати, немає підтримки для оновлення вашої моделі :-(
marc_s

Хоча це правда, питання було дуже розпливчастим і конкретно не згадувало, як оновити модель при зміні бази даних.
Jason Miesionczek

2

Існує нюанс в оновленні таблиць, а потім в оновленні DBML ... Зовнішні ключові зв'язки не завжди завжди перетворюються, якщо вносяться зміни до існуючих таблиць. Робота навколо полягає в тому, щоб скласти проект, а потім знову додати таблиці. Я повідомив про це в MS та про її встановлення на VS2010.

Дисплей DBML не показує нових обмежень зовнішнього ключа


Зауважте, що інструкції, наведені в основній відповіді, не зрозумілі. Для оновлення таблиці

  1. Відкрийте дизайнерську поверхню dbml
  2. Виберіть усі таблиці за допомогою правої кнопки-> Клацніть-> Вибрати всі або CTRLa
  3. CTRLx (Вирізати)
  4. CTRLv (Вставити)
  5. Зберегти та відновити рішення.

Я не вірю, що це виправлено, тому що пов'язані connect.microsoft.com/VisualStudio/feedback/details/414601/… не виправлено
Michael Freidgeim,

Ви вносите зміни до або після вирізання та вставки?
Калонь Колоб

Минуло 10 років ... але я вважаю, що це раніше ... зробіть зміни, тоді перейдіть до №2.
ΩmegaMan

1

У разі оновлення збереженої процедури слід видалити її з .dbml-файлу та знову вставити його. Але якщо збережена процедура має два шляхи (наприклад, якщо щось; відображати деякі стовпці; інше відображати деякі інші стовпці), переконайтеся, що два шляхи мають однакові псевдоніми стовпців !!! Інакше існуватимуть лише перші стовпці шляху.


0

Ось повний покроковий метод, який працював на мене для того, щоб оновити LINQ до dbml SQL та пов'язані з ним файли, щоб включити новий стовпець, який я додав до однієї з таблиць бази даних.

Вам потрібно внести зміни на вашу дизайнерську поверхню, як це запропоновано іншими вище; проте вам потрібно зробити кілька додаткових кроків. Це повні кроки:

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!).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.