ассоциации Более чистый DDD'y Филей вещь, вероятно, будет моделировать как User
и Case
как совокупности корней, а затем моделировать свои отношения с ролью объект RelatedCase
(он агрегирован внутри User
и, следовательно, должен быть каскадом = «все-удалить-сирота»).
Совокупные корни должны быть сохранены в репозиториях, которые (если вы делегируете вызов session.Save(...)
) предоставят вам необходимый вам идентификатор в то время, когда вы можете его использовать.
Тогда роль может (и по моему опыту часто будет, по крайней мере, через некоторое время) содержать дополнительную информацию, которая характеризует отношения, и не принадлежит ни к ни пользователю, ни к делу. Предположим, что отношения отслеживают, почему пользователь и случай связаны.
Таким образом, ваш код может выглядеть следующим образом:
var case = caseFactory.Create("name");
caseRepository.Save(case);
user.AssignCase(case, "Assigned by some dude");
-И внутри AddCase:
public void AddCase(Case case, string reason)
{
cases.Add(new RelatedCase(case, reason));
}
Это на мой взгляд, самый красивый способ модель такого рода вещи, но вы будете конечно, можно оштрафовать немного по производительности. Если для вас важнее симпатичная модель, вам нужно пойти на что-то подобное.
И следует упомянуть, что я использую сгенерированный guid.comb для идентификаторов. Если я выполняю Session.Save (@case), он генерирует идентификатор просто отлично, но мне интересно, почему это не происходит, когда он каскадирует. – asgerhallas
Что такое каскадный набор? – hackerhasid
«Каскад на User.Cases установлен на« Все ». :) – asgerhallas