Entity Framework Вставка исходных данных при перестроении - PullRequest
6 голосов
/ 01 октября 2011

Я использую сначала Entity Framework с источником данных MySQL.

Я определил ContactType.cs следующим образом:

public class ContactType
{
    [Key]
    public int ContactTypeId { get; set; }

    [Required, StringLength(30)]
    public string DisplayName { get; set; }
}

Мой вопрос заключается в том, как после перестройки базы данных можно ли использовать EF для вставки (без SQL) некоторых типов контактов в базу данных. Обычно БД перестраивается как пустая схема, но я хотел бы добавить такие типы контактов, как (Домашний, Мобильный, Офис, Факс).

1 Ответ

17 голосов
/ 01 октября 2011

Вы создаете пользовательский инициализатор базы данных и перезаписываете метод Seed

public class MyContextInitializer
    : DropCreateDatabaseIfModelChanges<MyContext>
{
    protected override void Seed(MyContext context)
    {
        context.ContactTypes.Add(new ContactType { DisplayName = "Home" });
        context.ContactTypes.Add(new ContactType { DisplayName = "Mobile" });
        context.ContactTypes.Add(new ContactType { DisplayName = "Office" });
        context.ContactTypes.Add(new ContactType { DisplayName = "Fax" });

        //EF will call SaveChanges itself
    }
}

Затем вы регистрируете этот инициализатор для своего производного контекста MyContext:

Database.SetInitializer<MyContext>(new MyContextInitializer());

Этостатический метод класса Database и должен вызываться где-то один раз при запуске приложения.Вы также можете поместить его в статический конструктор вашего контекста, чтобы убедиться, что инициализатор установлен перед созданием первого экземпляра контекста:

static MyContext()
{
    Database.SetInitializer<MyContext>(new MyContextInitializer());
}

Вместо базового инициализатора DropCreateDatabaseIfModelChanges<T>, который вы также можете получить изDropCreateDatabaseAlways<T> или CreateDatabaseIfNotExists<T>, если это лучше соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...