EF Миграции для первого подхода к базе данных?
Мы используем первый подход к базе данных с EntityFramework.
У нас несколько клиентов, и когда мы развертываем новую версию продукта, мы теперь применяем изменения схемы БД "вручную" с помощью таких инструментов, как SQL Compare
.
Есть ли способ, каким образом EF Migrations может помочь автоматически вносить изменения в клиентскую БД?
Ответы
Ответ 1
Насколько я знаю, EF Migrations является продуктом, ориентированным на CodeFirst и не поддерживает операции Database First.
CodeFirst предполагает, что вы никогда не внесете никаких изменений вручную в базу данных. Все изменения в базе данных будут проходить через первые миграции кода.
Ответ 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 в соответствии с вашим сервером и другими параметрами.
Подробнее здесь и здесь.
Ответ 3
Просто найдите дочерний объект DbContext и найдите этот метод:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
Если вы прокомментируете это:
throw new UnintentionalCodeFirstException();
то исключение не будет выбрано при операции миграции. Как вы можете себе представить, миграция ищет эту часть, чтобы узнать, какие конфигурации для каждого объекта имеют таблица или таблицы.
Извините, если я не поеду с более подробной информацией, если вы хотите больше, я буду рад изменить это и сделать его лучше!