Одноразовое добавление данных в CodeFirst БД

Создаю приложение с CodeFirst БД на Entity Framework.

Необходимо чтобы при создании БД одноразово были добавлены стандартные данные. Попробовал при загрузке окна добавлять в БД данные, но при каждой загрузке эти данные добавлялись снова.

Как мне решить эту проблему?


Ответы (2 шт):

Автор решения: Boris Makhlin

Создаем класс, который наследует один из следующих классов инициализаторов:

  • CreateDatabaseIfNotExists: инициализатор, используемый по умолчанию. Он не удаляет автоматчески базу данных и данные, а в случае изменения структуры моделей и контекста данных выбрасывает исключение.
  • DropCreateDatabaseIfModelChanges: данный инициализатор проверяет на соответствие моделям определения таблиц в базе данных. И если модели не соответствуют определению таблиц, то база данные пересоздается
  • DropCreateDatabaseAlways: этот инициализатор будет всегда пересоздавать базу данных.

В полученном классе нам нужно переопределить метод Seed. Внутри него мы можем проинициализировать таблицы нашей базы данных через DbSet'ы:

class MyInitializer : CreateDatabaseIfNotExists<КонтекстВашейБазыДанных>
{
    protected override void Seed(КонтекстВашейБазыДанных context)
    {
        // Обращаемся к DbSet'ам параметра context и заполняем их данными.
    }
}

Мы получили готовый класс, инициализирующий таблицы нашей базы данных. Теперь его нужно задать нашему классу-контексту:

public КонтекстВашейБазыДанных : DbContext
{
    static КонтекстВашейБазыДанных()
    {
        Database.SetInitializer<КонтекстВашейБазыДанных>(new MyInitializer());
    }
}    

Я создал статический конструктор, где задаю инициализатор. Подробнее можете прочитать тут.

→ Ссылка