Entity Framework Code - первые данные по умолчанию в базе данных - PullRequest
45 голосов
/ 14 апреля 2011

Как мне обращаться с ситуациями, в которых мне нужны уже существующие данные до запуска приложения или сразу после создания базы данных. Например, у меня есть список стран, в которых я хотел бы загрузить базу данных после того, как код сгенерирует ее первым. Как мне это сделать?

Приложение имеет следующую структуру:

Repository > Service > WebMVC

xml находится в проекте WebMVC.

Ответы [ 3 ]

67 голосов
/ 14 апреля 2011

Вы создаете пользовательский инициализатор, который наследуется от интерфейса DropCreateDatabaseIfModelChanges или DropCreateDatabaseAlways.Например:

public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<-YourDbContext->

И затем вы перезаписываете метод Seed, например:

protected override void Seed(YourDbContext context)

Весь пример может выглядеть следующим образом:

public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<EntitiesContext>
{
    protected override void Seed(EntitiesContext context)
    {
        List<Role> roles = new List<Role>
        {
            new Role {Id=1, Title="Admin"},
            new Role {Id=2, Title="ProjectManager"},
            new Role {Id=3, Title="Developer"}
        };

        // add data into context and save to db
        foreach (Role r in roles)
        {
            context.Roles.Add(r);
        }
        context.SaveChanges();

    }
}

Редактировать: после настройки этого,Вы также должны настроить Initializer, как упоминал Ладислав Мрнка.

Database.SetInitializer(new EntitiesContextInitializer());

, т. е. в Global.asax:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
    Database.SetInitializer(new EntitiesContextInitializer());
}

Не забудьте добавить using System.Data.Entity; .....

11 голосов
/ 14 апреля 2011

Вы должны создать собственный инициализатор базы данных, полученный, например, из DropCreateDatabaseIfModelChanges и заполнить данные переопределенным методом Seed.Затем вы должны использовать Database.SetInitializer, чтобы установить новый инициализатор при запуске приложения. Здесь - пример (из CTP5), используемый для создания пользовательского индекса в базе данных.

1 голос
/ 14 апреля 2011

Пример см. В новой серии учебных пособий по MVC / Entity Framework по адресу http://www.asp.net/entity-framework/tutorials#Using%20MVC И # 1, и # 4 показывают классы инициализатора.

...