Я борюсь с тем, как лучше разбить модель домена на несколько проектов Visual Studio. Я работаю с шаблонами EntityFramework 4 и Enterprise-type, чтобы рационализировать систему, которую можно повторно использовать для различных приложений. В конце концов я хочу получить набор библиотек классов DLL, которые можно использовать в разных веб-приложениях.
К сожалению, у меня есть стандартная схема базы данных, которая включает в себя информацию о пользователях, базовую CRM, базовую CMS, а также облегченную платформу электронной коммерции.
CRM / пользовательские таблицы являются ядром системы. Платформы CMS и электронной коммерции используют пользовательские таблицы CRM. Я хочу определить базовую модель домена, с которой связываются / наследуются модели доменов CMS и eCommerce.
Пока у меня есть три визуальных студийных проекта:
- MyNamespace.Model.Core
- MyNamespace.Model.CMS
- MyNamespace.Model.Commerce
В каждой из этих моделей есть файл EDMX модели предметной области Entity Framework. EDMX содержит все соответствующие таблицы для каждой. Это означает, что файл EDMX для проектов CMS и Commerce содержит некоторые пользовательские таблицы. Я теоретически мог бы иметь одну большую модель EF и поместить все POCO в один класс, но это не очень расширяемо.
Проекты также содержат POCO для каждой из таблиц (они, вероятно, должны быть в отдельном проекте, но пока вещи не отсортированы, они могут оставаться на своих местах!).
Когда я использую модель предметной области в слое обслуживания с Единицей Работы, я хочу использовать только один ObjectContext (это фактически оболочка IObjectContext, которая нацелена на EF ObjectContext). По этой причине я дал каждому из файлов EDMX одно и то же имя контейнера сущностей и пространство имен.
Вопросы:
- Это правильная вещь?
- Если в одном и том же пространстве имен есть модели EF с одним и тем же именем контейнера (хотя и в разных проектах), это вызовет проблемы, если таблица / объект повторяется (например, клиенты) в этих разных моделях?