2012-02-13 3 views
30

Мы используем первый подход к базе данных с EntityFramework. У нас есть несколько клиентов, и когда мы развертываем новую версию продукта, мы теперь применяем изменения схемы БД «вручную» с помощью таких инструментов, как SQL Compare.EF Миграции для подхода, основанного на базе данных?

Есть ли способ, каким образом EF Migrations может помочь автоматически вносить изменения в клиентскую БД?

+0

, конечно, я не хочу ничего потерять, функция First First Migration, похоже, сохраняет данные, я хочу сначала что-то подобное для БД. Я действительно хочу это для простых сценариев - добавлены новые таблицы, новые поля и т. Д. – Shaddix

+0

Если вы хотите, чтобы аналогичная функциональность для EF Migrations использовалась в базе данных, сначала проверьте [FluentMigrator] (https://github.com/fluentmigrator/fluentmigrator) –

ответ

14

Насколько я знаю, EF Migrations является продуктом, ориентированным на CodeFirst и не поддерживает операции Database First.

CodeFirst предполагает, что вы никогда не внесете никаких изменений вручную в базу данных. Все изменения в базе данных будут проходить через первые миграции кода.

+3

Спасибо , похоже, что скрипты update-scripts - единственный способ пойти с EF в настоящее время. – Shaddix

+4

Хорошей альтернативой может быть проекты базы данных/SSDT и сравнение схем. –

2

думаю есть! Сначала вам нужно продолжить свой код.

Чтобы сделать это, Предположим, что у вас есть следующий DbContext что EF Db первый созданный для вас:

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("Name=DefaultConnection") 
    { 

    } 

    // DbSets ... 
} 

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

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("YourDbFileName") 
    { 

    } 

    // DbSets ... 
} 

Это вызывает то, что EF создает новую строку подключения с помощью SQL Express на локальном компьютере в файле web.config с именем YourDbFileName, что-то так же, как в начале DefaultConnection Db первым создал.

Все, что вам может понадобиться, чтобы продолжить свой путь, заключается в том, что вы редактируете ConDr в соответствии с вашим сервером и другими параметрами.

Дополнительная информация here и here.

0

Просто посмотрите для DbContext дочернего объекта и искать для этого метода:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

Если вы прокомментировать это:

throw new UnintentionalCodeFirstException(); 

то исключение не будет выброшен на операции миграции. Как вы можете себе представить, миграция ищет эту часть, чтобы узнать, какие конфигурации для каждого объекта имеют таблица или таблицы.

Извините, если я не пошёл с более подробной информацией, если вы хотите больше, я буду рад изменить это и сделать его лучше!