У меня проблема с курицей и яйцом, она тривиальна, поэтому я решил спросить, каков нормальный шаблон для сохранения агрегированного корня, где все первичные ключи являются полями идентичности.
У меня есть типичный контактный объект:
Customer {
HomeAddress {
}
WorkAddress {
}
}
, где оба адреса хранятся в таблице адресов, и единственным первичным ключом является поле идентификатора. Мы сверяем все поля друг с другом, чтобы сохранить уникальные записи адресов.
Вот проблема:
- Мне нужно получить поле идентификатора Адреса для подключения внешних ключей, поэтому я сохраняю запись Адреса до сохранения записи Клиента, только если она уникальна, в противном случае я загружаю этот существующий Адрес.
- Если Адрес находится в том же DC, что и Клиент, то клиент слишком преждевременно сохраняет данные (не все записи установлены).
- Если Address находится в отдельном DC, он не подключается к записи клиента, имеющей собственный DC, поскольку у вас не может быть объекта, связанного с двумя DC (нельзя открыть в одном, а затем сохранить в другом).
Таким образом, я думаю, что мне потребуется отдельный репозиторий для каждого адреса, а затем отдельно загрузить адрес снова в другой DC, делая избыточные вызовы в базу данных для той же информации.
Есть ли способ частично сохранить записи в контексте данных / контейнере в Entity Framework 4.1? Например, чтобы сохранить адрес самостоятельно, находясь в том же DC?