Плагины MEF и EF CodeFirst - как?

Предпосылки:
У нас есть проект с множеством модулей. Мы используем EntityFramework 4.2 с FluentAPI (CodeFirst).

Существует центральный проект под названием Diverto.ORM.EntityFramework.SQLServer, который содержит частичные классы, которые создают контекст с помощью FluentAPI (и который имеет ссылки на все остальные проекты в решении).

Недавно мы получили запрос от клиента на реализацию многих других функций, и для решения потребуется еще несколько проектов. Некоторые из этих проектов поступят из другой системы (человеческие ресурсы), а некоторые будут созданы. Ядром существующего решения является финансовая система.

Мы хотим включать и отключать эти новые проекты (и графический интерфейс, бизнес-логику и все остальное) «на лету» с помощью MEF. Они будут взаимодействовать как плагины, а главное меню приложения будет заполняться также с использованием MEF.
Однако мы действительно не знаем, как включить / отключить эти модули / проекты (новые и HR) из-за данных, которыми они должны поделиться.

Рассмотрим это:
- DivertoContext (основной контекст) с DbSet и DbSet .
- PluginContext (из плагина) с DbSet .

Теперь учтите, что внутри графического интерфейса я должен иметь доступ к данным из ClassA, ClassB и ClassC (если там есть плагин).

Решение найдено! См. Ниже

ЭЙ, ВЫ ЗДЕСЬ, ПРОЧИТАЙТЕ ЭТО ДО ОТВЕТА!

Я заметил, что некоторые люди проверяли это и отмечали это как избранное или голосование за. Пожалуйста, имейте в виду, что этот ответ датируется 2012 годом, и с тех пор EntityFramework сильно изменился .

Также, пожалуйста, , пожалуйста, , ПОЖАЛУЙСТА, , помните, что у каждого проекта есть свои собственные потребности. В то время мне была нужна эта функция таким образом. Вашему проекту это может вообще не понадобиться, или только некоторые части этого!

Наконец, просто чтобы убедиться, что все прикрыто, да, это возможно сделать с EF 6.1 и EF Migrations, а также с другими ORM и фреймворком миграции.

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

17
задан Kishore Kumar 28 May 2014 в 08:25
поделиться