Сначала код EF - заполнение после удаления, а затем создание базы данных - PullRequest
5 голосов
/ 13 марта 2012

Я пытаюсь заставить EF Code First заново инициализировать базу данных. Мои первые мысли должны были позвонить:

dbContext.Database.Delete();    
dbContext.Database.Create();

Это создает новую базу данных, но стратегия заполнения (установленная с помощью Database.SetInitializer <>) игнорируется. Я делаю выше в методе Application_Start. Есть идеи?

Я также пробовал:

dbContext.Database.Initialize(true);

Ответы [ 3 ]

0 голосов
/ 11 сентября 2012

Вот что я сделал, чтобы преодолеть это:

  1. Добавьте флаг в ваш контекстный инициализатор

    public bool WasSeeded = false;

  2. Создайте публичный метод в вашем инициализаторе и поместите туда свой начальный код. Я удостоверился, что использовал только AddOrUpdate или другие методы upsert, то есть проверил, что данные не находятся в БД раньше:

    context.Students.AddOrUpdate

В конце установите значение true

  1. После инициализации контекста проверьте флаг и, если он ложный, запустите логику вручную:

    if (! Initializer.WasSeeded) { initializer.SeedAndUpsert (контекст); }

0 голосов
/ 30 августа 2013
Database.SetInitializer(new CustomInitializer()); //CustomInitializer contains the overriding Seed method

using (var context = new CustomDatabaseContext())
{
    context.Database.Initialize(force: true);
}
0 голосов
/ 19 марта 2012

Один из вариантов - создать свой собственный DatabaseInitializer, который наследуется от DropCreateDatabaseAlways.

Примером этого будет.

public class MyInitializer : DropCreateDatabaseAlways<EmployeeContext>
{
    protected override void Seed(EmployeeContext context)
    {
        context.Employees.Add(new Employee() {FirstName = "Marcy"});
        base.Seed(context);
    }
}

public class EmployeeContext : DbContext
{
    static EmployeeContext()
    {
        Database.SetInitializer(new MyInitializer()); // using my own initializer
    }

    public IDbSet<Employee> Employees { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...