Исключение миграции добавления EF: не удалось загрузить сборку

У меня всего 2 дня опыта работы с EF Migrations, поэтому будьте добры...

У меня есть довольно большое существующее решение WPF WCF MVVM EF 4.1, которое необходимо перенести на EF 4.3.1 и начать использовать миграцию. Проект «Службы» решения содержит четыре DbContext, каждый из которых находится в своем собственном пространстве имен и каждый связан со своей собственной базой данных.

Прежде чем приступить к изменению большого решения, я провел несколько экспериментов с небольшим образцом консольного приложения только с одним проектом и двумя контекстами DbContext, в основном на основе примера, предоставленного «e10» (Автомиграция EF 4.3 с несколькими DbContexts в одной базе данных). Пример приложения работает хорошо, и я могу выполнить перенос и обновление базы данных отдельно для двух контекстов (путем указания параметра -configuration).

Но когда я попытался воспроизвести тот же подход с «настоящим» (большим) решением — с четырьмя DbContexts — я столкнулся с проблемой: когда я вызываю add-migration в PMC и указываю любое из четырех имен конфигурации, add-migrations получает исключение, говорящее, что он не может загрузить сборку Services.

Вот что я сделал с большим решением:

1) Добавлен пакет NuGet EF 4.3.1 в мои проекты Core, Services и UI (последний бит может быть важен).

2) создал папку «Миграции» в проекте «Мои службы» и вручную создал файл Configuration.cs, содержащий четыре класса, которые наследуются от DbMigrationsConfiguration‹типа>, где типом является приложение, каталог, управление портфелем или планировщик. (код ниже)

3) добавил свойство в один из классов модели, связанный с App DbContext, чтобы было что мигрировать

4) из PMC вызвал add-migration:

 PM> add-migration App_AddNewProperty -config App

Обратите внимание, что я не делал «Enable-Migrations», потому что, как сказал e10 в своем посте:

«Вам не нужно включать миграцию, поскольку вы уже сделали это с… классами выше» (имеется в виду классы в Configurations.cs).

5) добавление-миграция получает исключение: не удалось загрузить файл или сборку «MyApp.Services» или одну из ее зависимостей

Я включил ведение журнала сбоев привязки, и журнал сбоев показывает, что он пытается найти сборку служб в папке bin/debug UI, а не в проекте служб).

И это не работает так же, даже если у меня есть проект по умолчанию в PMC, установленный на проект служб (по умолчанию проект по умолчанию - проект пользовательского интерфейса).

Я подозреваю, что это вызвано тем, что пользовательский интерфейс не имеет ссылки на сборку Services (у него есть ссылка WCF Service, но не ссылка на сборку). Но если это проблема, как мне заставить PMC не запускаться в проекте пользовательского интерфейса? Или я могу «отвязать проект пользовательского интерфейса от пакета EF»?

Спасибо!

ПапаКот

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

namespace MyApp.Services.Migrations
{
    internal sealed class App : DbMigrationsConfiguration<Geophysical.Skimmer.Services.App.Repository.ModelContainer>
    {
        public App()
        {
            AutomaticMigrationsEnabled = false;
            MigrationsNamespace = "MyApp.Services.App.Repository.ModelContainer";
        }

        protected override void Seed(MyApp.Services.App.Repository.ModelContainer context)
        {
            ... no code here
        }
    }

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

        protected override void Seed(MyApp.Services.Catalog.Repository.ModelContainer context)
        {
            ... no code here

        }
    }

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

        protected override void Seed(MyApp.Services.PortfolioManagement.Repository.ModelContainer context)
        {
            ... no code here
        }
    }

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

        protected override void Seed(MyApp.Services.Scheduler.Repository.ModelContainer context)
        {
            ... no code here
        }
    }
}

person DadCat    schedule 01.06.2012    source источник
comment
Попробуйте явно указать проект, который содержит миграции: -projectName Services -startupProjectName Services   -  person pakeha_by    schedule 23.04.2014