Модульные приложения с Entity Framework Code Only и ASP.NET MVC - PullRequest
7 голосов
/ 28 февраля 2011

Под модульными приложениями я подразумеваю приложения, в которых базовая функциональность и модель данных могут быть расширены без изменения кода основного приложения.

Это популярный подход, например.CRM с открытым исходным кодом, такие как SugarCRM или VTiger.

Этот подход может быть использован в приложении asp.net mvc с использованием областей или (переносимых областей из MVC contrib), которые позволяют добавлять новые контроллеры и представления в отдельных сборках без влияния на базовые библиотеки.

проблема возникает, когда кто-то хочет расширить модель данных базового приложения.Это невозможно в практическом смысле с структурой сущностей, где определение модели централизовано в файле Edmx.Этот подход не позволяет добавлять новую таблицу, которая будет ссылаться на некоторую базовую таблицу модулей в новой сборке.

Я заметил, что Orchard CMS достигает полной модульности с помощью nHibernate (что говорит, учитывая, что ониу Microsoft есть поддержка, и проект задумывался как демонстрация технологий).Nhibernate позволяет такую ​​модульность благодаря подходу POCO.Каждая сущность / таблица определена в отдельном файле, что, очевидно, является подходом для модульных приложений.

Однако есть надежда с подходом Entity Framework Code Only, который генерирует модель Edmx во время выполнения с использованием определений POCO,Кто-нибудь пробовал этот подход для распространения определений модели данных в отдельных подключаемых проектах?

1 Ответ

3 голосов
/ 28 февраля 2011

Я добился этого с помощью EF Code First и комбинации точек расширения GUI на модуле ядра. Это привело к:

  • Каждый модуль рассматривается как отдельное приложение (кроме GUI)
  • Каждый модуль имеет собственную базу данных (так как код сначала сбрасывает и воссоздает базу данных)
  • Каждый модуль может дублировать необходимые данные в другом модуле
  • Каждый модуль является услугой
  • Каждый модуль может расширять графический интерфейс через ядро ​​ Точки расширения через контейнер IoC
  • Модули могут взаимодействовать с каждым из них через асинхронный обмен сообщениями (nServiceBus) и синхронный RPC (WCF)

Обратите внимание, что это корпоративное приложение, которое мы разработали для SOA.

С помощью EF Code First, если вы управляете своей базой данных вручную (т.е. не удаляете и не воссоздаете), вы можете воспользоваться некоторыми приведенными выше понятиями и упростить их. Вам может понадобиться пользовательский IDatabaseInitializer для его поддержки, но это должно быть возможно.

...