Я пытаюсь реализовать несколько ограниченных контекстов DDD, как указано here. Это пример контекст:Управление конфигурацией Entity с ограниченным контекстом DDD
У меня есть файл конфигурация типа объекта для каждого объекта с соответствующими отображениями FluentAPI (обратное проектирование с использованием EF инструментов). Эти файлы конфигурации также включают конфигурации отношений.
.: например UserMap.cs
// Relationships
this.HasOptional(t => t.SecurityProfile)
.WithMany(t => t.Users)
.HasForeignKey(t => t.SecurityProfileCode);
SecurityProfile
и DomainPermission
не в контексте DbSets
. Они автоматически приводятся в модель из-за навигационных свойств на User
и Module
соответственно.
Это вызывает мою первую проблему. При добавлении User
(или любой другой объект) в любом другом контексте я должен помнить, чтобы сделать одну из двух вещей:
добавить также конфигурации в модели строителя для
SecurityProfile
(и все другие отношения на предприятие)Исключить
SecurityProfile
из модели явно как-то.
Это начинает немного кошмар для обслуживания.
Я был бы удовлетворен явно «обрезать» граф сущности, как указано в пункте 2 выше.
Однако не представляется возможным для объектов Ignore()
, когда отношения уже определены в файлах конфигурации сущности.
Попытка modelBuilder.Ignore<SecurityProfile>();
для приведенного выше контекста OnModelCreating
дает следующее сообщение об ошибке в ConfigureAssociations()
:
System.InvalidOperationException: Навигационная свойство «SecurityProfile» не является объявленное свойство по типу «Пользователь». Убедитесь, что он не был явно исключен из модели и что он является допустимым навигационным свойством.
Единственное решение, о котором я могу думать, это наследовать классы базовой конфигурации и переопределять конфигурацию отношений в каждом контексте. Учитывая, что мы можем закончиться 30-40 + отдельными контекстами, это также может стать кошмаром для обслуживания.
В качестве альтернативы я мог бы иметь очень конкретные модели сущностей для каждого контекста, но опять же это привело бы к взрыву класса объекта и потенциальной проблеме обслуживания в дублированной конфигурации.
Как я могу лучше управлять и поддерживать объекты и их конфигурации сущностей при реализации ограниченных контекстов?
Нечетный факт, что кто-то проголосует, чтобы закрыть это, рассматривая [сайт проекта EF] (http://entityframework.codeplex.com/discussions), говорится: «По вопросам об использовании Entity Framework в вашем приложении, пожалуйста, задайте вопрос о переполнении стека, используя тег сущности-рамки. " –
Если вы посмотрите на закрытый голос, вы увидите, что это было «слишком широко». И я согласен с этим. У вас есть три вопроса, а не один. Замечание: DDD говорит, что ваши сущности должны быть невосприимчивыми к тому, что ваши права не являются, поскольку вы, очевидно, должны изменить их, чтобы они соответствовали требованиям EF. – jgauffin
@jgauffin Я был бы счастлив сконденсировать 3 вопроса до 3-го. Однако это не простой вопрос «как это сделать», и справочная информация полезна для всех трех вопросов. Поэтому причина того, что он «слишком широк» недействителен, считается, что SO - это рекомендуемая розетка, чтобы задавать эти типы вопросов. Возможно, это проблема, когда проекты с открытым исходным кодом захватывают SO как свой канал сообщества. Но, казалось бы, без каких-либо других вариантов, это единственный выход, который я надеюсь получить ответ. –