Спочатку код сутності сутності - як запустити Update-Database для виробничої бази даних


78

Я хочу знати, як запустити команду 'Update-Database' для виробничої бази даних.

База даних 'Update-Database' чудово працює на моєму локальному комп'ютері, але як я можу змусити це працювати для виробничих даних?

Отже, якщо я внесу зміни в свою програму, а потім запустив "опублікувати" через Visual Studio, це прекрасно працює для кодової сторони, але як мені запустити команду "Оновити базу даних" для виробничих даних.

Сподіваюся, це питання має сенс ...

Дякую,



Ви можете використовувати наданий migrate.exe, який знаходиться у встановленому пакеті Nuget. Див. Використання: msdn.microsoft.com/en-us/library/jj618307(v=vs.113).aspx
майор

Відповіді:


25

Щоб додати те, що вже сказав @David ...

Особисто я не довіряю automatic updatesсценаріям "в реальному часі", і завжди віддаю перевагу адмініструванню баз даних вручну (тобто є проблема зpermissions необхідністю створення або зміни Db - не кажучи вже про спільний хостинг тощо) - але з того, що я бачив Міграції є досить твердими, коли справа доходить до синхронізації (насправді, єдиним способом «розв’язати» їх, як правило, є видалення Db та примусове повне / свіже оновлення).

Ось допис, який я зробив деякий час тому про те, як scriptіsynchronize database / code і спрямовані сценаріях розгортання (і в разі виникнення проблем). Це не стосується вас (поки), але щось потрібно пам’ятати.

MVC3 та Code First Migrations - "модель, що підтримує контекст" бла ", змінилася з моменту створення бази даних"


2
Чому так складно? Що поганого в простому запуску коду міграції автоматично, коли програма запускається / використовує контекст вперше? Чим сценарій SQL кращий, ніж виклик методу C #?
Флоріан Зима

1
@FlorianWinter відповідає дійсності в ідеальних умовах та порівняно простих сценаріях, і якщо ви знаєте, що робите (наприклад, адміністрація та таблиця міграції баз даних). Але швидше, ніж пізніше ви потрапляєте на деякі проблеми, виходить з ладу тощо. І у вас є дані в реальному часі, які не можна торкатися будь-якою ціною. Я справді не довіряю міграціям чи будь-яким ініціалізаторам, які роблять це для мене. І це пов’язано з безліччю питань, які я бачив протягом багатьох років. Тому, коли ми передаємо дані в реальному часі, мені подобається мати повний контроль. Я можу дозволити програмі запуститись і "перенести себе", але лише після того, як я перевірив. І масштабування тощо
NSGaga, здебільшого неактивний

Піднятий пункт, і я згоден. Я додаю застереження та посилання вашої вашої відповіді на мою відповідь, але я залишу це там, оскільки ці прості сценарії дійсно існують. Принаймні тимчасово ...
Флоріан Зима

35

Див. Розділ Використання Entity Framework (спочатку кодуйте) міграції у виробництві, щоб програма автоматично оновлювала базу даних при ініціалізації Entity Framework.

Тепер, якщо вам зручніше мати ручний контроль за міграцією, ви можете використовувати аргумент -Script до команди Update-Database на вашій машині розробника, щоб створити сценарії SQL, які потім можна запустити проти робочої бази даних.

http://msdn.microsoft.com/en-us/data/jj591621.aspx (див. розділ Отримання сценарію SQL)


5

Ви просто хочете автоматично оновити базу даних до останньої версії, коли і де колись працює ваша програма (розробка та виробництво)?

Це може бути не найкращою ідеєю, за винятком дуже простих сценаріїв, коли ви знаєте, що можете довіряти автоматичній міграції, і ручна міграція баз даних неможлива. Перегляньте цю відповідь: https://stackoverflow.com/a/15718190/2279059 . Якщо ви нехтуєте цим попередженням, читайте далі.

Додайте наступне до web.config:

<entityFramework>
<contexts>
  <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" />
  </context>
</contexts>

Це може виглядати страшно, але в основному це те ж саме, що і наступний код:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>());

Якщо вам не пощастило web.config, ви можете спробувати застосувати цей кодGlobal.asax . Я особисто віддаю перевагу конфігурації над кодом.

Якщо ви хочете, щоб ваш конфігураційний файл виглядав чистішим, ви також можете отримати новий клас із класу шаблону, MigrateDatabaseToLatestVersionтому вам не потрібно використовувати загадковий синтаксис для передачі аргументів типу у ваш web.cofigфайл:

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {}

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

(Джерело та детальніша інформація: http://www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html )


0

Ще одне рішення, яке спрацювало для мене, було таким: у своєму локальному файлі web.config я встановив рядок підключення, щоб вказував на робочий сервер.

Тоді всі команди консолі PM будуть запущені на робочому сервері. Я можу update-databaseабо скасувати міграції за необхідності, і зміни застосовуватимуться до робочої бази даних.


0

Ви можете запустити команду Update-Database EF Tools, використовуючи рядок виробничого підключення наступним чином:

Update-Database -Args '--environment Production'

Джерело: https://docs.microsoft.com/en-us/ef/core/cli/powershell#aspnet-core-environment

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

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