Ошибка переноса добавления Entity Framework 4.3.1: модель, поддерживающая контекст, изменилась

Я получаю сообщение об ошибке при попытке запустить команду EF 4.3.1 add-migrations:

«Модель, поддерживающая контекст ..., изменилась с момента создания базы данных».

Вот одна последовательность, которая вызывает ошибку (хотя я пробовал, наверное, дюжину вариантов, и все они терпят неудачу)...

1) Начните с базы данных, созданной EF Code First (т. е. уже содержащей таблицу _MigrationHistory только со строкой InitialCreate).

2) На данный момент модель данных кода приложения и база данных синхронизированы (база данных была создана CF при запуске приложения).

3) Поскольку у меня есть четыре DBContexts в моем проекте «Службы», я не запускал команду «enable-migrations» (она не обрабатывает несколько контекстов). Вместо этого я вручную создал папку «Миграции» в проекте «Службы» и файл «Configuration.cs» (приведен в конце этого поста). [Кажется, я читал это где-то в посте]

4) Поскольку база данных еще не изменена и приложение остановлено, я использую редактор VS EDM, чтобы внести тривиальное изменение в мою модель данных (добавить одно свойство к существующему объекту) и создать новые классы (но не изменить база данных, очевидно). Затем я перестраиваю решение, и все выглядит нормально (но, конечно, не удаляйте базу данных и не перезапускайте приложение).

5) Я запускаю следующую команду PMC (где «Приложение» — это имя одного из классов в Configuration.cs):

PM> add-migration App_AddTrivial -conf App -project Services -startup Services -verbose

... который завершается с ошибкой "Модель... изменилась. Рассмотрите возможность использования Code First Migrations...".

Что я делаю неправильно? И кто-нибудь еще видит иронию в инструменте, говорящем мне использовать то, что я уже пытаюсь использовать ;-)

Как правильно настроить решение, начиная с базы данных, созданной EF CF? Я видел сообщения о запуске первоначальной миграции с параметром -ignorechanges, но я пробовал это, и это не помогает. На самом деле, я провел весь ДЕНЬ, тестируя различные перестановки, и ничего не работает!

Должно быть, я делаю что-то очень глупое, но я не знаю что!

Спасибо,

ПапаКот

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

namespace mynamespace {внутренний запечатанный класс App: DbMigrationsConfiguration {public App() { AutomaticMigrationsEnabled = false; MigrationsNamespace = "Services.App.Repository.Migrations"; }

    protected override void Seed(.Services.App.Repository.ModelContainer context)
    {

    }
}

internal sealed class Catalog : DbMigrationsConfiguration<Services.Catalog.Repository.ModelContainer>
{
    public Catalog()
    {
        AutomaticMigrationsEnabled = false;
        MigrationsNamespace = "Services.Catalog.Repository.Migrations";
    }

    protected override void Seed(Services.Catalog.Repository.ModelContainer context)
    {

    }
}

internal sealed class Portfolio : DbMigrationsConfiguration<Services.PortfolioManagement.Repository.ModelContainer>
{
    public Portfolio()
    {
        AutomaticMigrationsEnabled = false;
        MigrationsNamespace = "Services.PortfolioManagement.Repository.Migrations";
    }

    protected override void Seed(Services.PortfolioManagement.Repository.ModelContainer context)
    {

    }
}

internal sealed class Scheduler : DbMigrationsConfiguration<.Services.Scheduler.Repository.ModelContainer>
{
    public Scheduler()
    {
        AutomaticMigrationsEnabled = false;
        MigrationsNamespace = "Services.Scheduler.Repository.Migrations";
    }

    protected override void Seed(Services.Scheduler.Repository.ModelContainer context)
    {

    }
}

}


person DadCat    schedule 03.07.2012    source источник
comment
Чего именно вы пытаетесь достичь? Миграции EF не поддерживают обработку нескольких контекстов в одной базе данных — отказ от запуска Enable-Migrations ничего не меняет. Кроме того, создание классов с помощью конструктора EDM — это не первый код.   -  person Ladislav Mrnka    schedule 04.07.2012


Ответы (1)


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

person Anders Abel    schedule 04.07.2012