Одноразовое добавление данных в CodeFirst БД
Создаю приложение с CodeFirst БД на Entity Framework.
Необходимо чтобы при создании БД одноразово были добавлены стандартные данные. Попробовал при загрузке окна добавлять в БД данные, но при каждой загрузке эти данные добавлялись снова.
Как мне решить эту проблему?
Ответы (2 шт):
Всё это описано в следующей статье: https://professorweb.ru/my/entity-framework/6/level2/2_10.php
Создаем класс, который наследует один из следующих классов инициализаторов:
- CreateDatabaseIfNotExists: инициализатор, используемый по умолчанию. Он не удаляет автоматчески базу данных и данные, а в случае изменения структуры моделей и контекста данных выбрасывает исключение.
- DropCreateDatabaseIfModelChanges: данный инициализатор проверяет на соответствие моделям определения таблиц в базе данных. И если модели не соответствуют определению таблиц, то база данные пересоздается
- DropCreateDatabaseAlways: этот инициализатор будет всегда пересоздавать базу данных.
В полученном классе нам нужно переопределить метод Seed. Внутри него мы можем проинициализировать таблицы нашей базы данных через DbSet'ы:
class MyInitializer : CreateDatabaseIfNotExists<КонтекстВашейБазыДанных>
{
protected override void Seed(КонтекстВашейБазыДанных context)
{
// Обращаемся к DbSet'ам параметра context и заполняем их данными.
}
}
Мы получили готовый класс, инициализирующий таблицы нашей базы данных. Теперь его нужно задать нашему классу-контексту:
public КонтекстВашейБазыДанных : DbContext
{
static КонтекстВашейБазыДанных()
{
Database.SetInitializer<КонтекстВашейБазыДанных>(new MyInitializer());
}
}
Я создал статический конструктор, где задаю инициализатор. Подробнее можете прочитать тут.