Entity Framework 5 удаляет мою модель изменения базы данных

У меня есть проект ASP.NET MVC 4 с Entity Framework 5, .NET 4.5 и Visual Studio 2012. В моем решении я поместил все модели в проект под названием Model, все репозитории и мой DbContext в еще один проект под названием Data . Я активирую миграции в проекте Data с помощью команды Enable-Migrations. Я решаю обрабатывать их вручную. Если я создаю новую миграцию с помощью команды Add-Migration, все работает очень хорошо. Если, например, я добавляю в таблицу новый столбец, он работает нормально. Я вижу новый столбец в схеме базы данных и новую запись в таблице _MigrationHistory. На данный момент, когда создан новый столбец, мне нужно добавить этот столбец в правильную модель. Итак, я добавляю этот метод в свой класс модели code-first и запускаю проект. Он удаляет мою базу данных и запускает ее с начальной миграцией. Я не могу настроить модель без потери всех данных. Как я могу избежать этого поведения? Спасибо

ОБНОВИТЬ:

Конфигурация.cs

namespace NegoziazioneEventi.Data.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<NegoziazioneEventi.Data.NeDataContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(NegoziazioneEventi.Data.NeDataContext context)
        {

        }
    }
}

Application_Start() в Global.asax

protected void Application_Start()
        {

            // init basic data on database
            System.Data.Entity.Database.SetInitializer(new Models.InitData());

            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);

            _container = Bootstrapper.GetWindsorContainer();

        }

person Darion Badlydone    schedule 26.09.2012    source источник
comment
Можете ли вы опубликовать свой код Configuration.cs из папки Migrations и метод Application_Start из Global.asax?   -  person Tomi Lammi    schedule 26.09.2012
comment
Я разместил их в вопросе. Спасибо   -  person Darion Badlydone    schedule 26.09.2012


Ответы (1)


Я решаю обрабатывать их вручную. Если я создаю новую миграцию с помощью команды Add-Migration, все работает очень хорошо. ... На этом этапе, когда создан новый столбец, мне нужно добавить этот столбец в правильную модель. Итак, я добавляю этот метод в свой класс модели code-first и запускаю проект.

Это совершенно неправильное использование миграции, и это также причина, по которой EF удаляет вашу базу данных. Сначала вы должны добавить свойство в модель, а затем добавить миграцию, потому что EF необходимо хранить правильные данные в таблице _MigrationHistory, чтобы сопоставить эту запись с реальным значением этой миграции.

При вашем текущем подходе EF запускает приложение и проверяет таблицу _MigrationHistory, но запись в таблице не содержит информации о вашем недавно добавленном свойстве, поэтому EF считает, что в вашу модель было внесено новое изменение, и использует стратегию по умолчанию для удаления базы данных и создания новой один, отражающий вашу текущую модель. Вы можете отключить это поведение, но вы должны начать с правильного использования миграции!

Чтобы отключить поведение, используйте:

Database.SetInitializer<YourDatabaseContext>(null);

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

person Ladislav Mrnka    schedule 26.09.2012
comment
Большое спасибо. Я не могу найти полную справочную документацию по Entity Framework, поэтому я пытаюсь без знаний. - person Darion Badlydone; 26.09.2012
comment
Если кому-то нужно руководство по выполнению миграции: asp.net/web-forms/tutorials/deployment/ - person Darion Badlydone; 27.09.2012