Я архивирую свое приложение на линиях шаблона репозитория, совокупный корень и единицу работы. Я использую Entity Framework5 как ORM.Шаблон репозитория и сводный корневой шаблон и структура Entity Framework
Я в ситуации, когда я не знаю, как продолжить добавление новых сущностей, которые являются совокупными корнями и имеют отношение внешнего ключа к объектам, которые не являются совокупными корнями.
Я не уверен, имел ли я смысл с моим предыдущим заявлением, но позвольте мне привести его здесь.
Person Таблица в Db (Это совокупный корень в моем приложении)
- Имя
- Строка адреса 1
- CountryId
Страны таблице (Это не как я мог бы никогда не запрашивать их самостоятельно)
- CountryId
- Название страны
В моем приложении у меня есть PersonsRepository, который реализует общий репозиторий, где T представляет собой совокупный корень.
Теперь, когда я создаю нового человека в своем коде, мне нужно добавить страну в свойство навигации объекта Person. Если я создаю новый объект страны и присвою его свойству Person's Country и попытаюсь сохранить объект Person, EF выдает ошибку. Я не могу запросить таблицу «Страны», потому что это не мой корень Aggregate.
Ну, это не мой реальный сценарий, но это то, что я пытаюсь преодолеть. Как мне исходить?
Одна мысль, которая приходит мне на ум, заключается в создании универсального репозитория только для чтения, который будет использоваться для запросов к БД и не будет его модифицировать. Это хороший способ продолжения или что-то не так, что я делаю.
Заранее благодарим за ваш ответ и за чтение длинного сообщения.
И какая ошибка EF кидает? –
Он выбрасывает «Невозможно передать объект Person для ввода Country», и я думаю, что это совершенно верно, почему я должен создавать новый объект Country, если он является внешним ключом в db. Он отлично работает. Если я прихожу к стране с помощью datacontext и присваиваю ее объекту Country Property of Person при его создании. –