Дизайн, управляемый доменом, содержащий сущности и постоянство NHibernate - PullRequest
0 голосов
/ 10 июня 2009

В моей структуре, управляемой доменом, у меня есть содержащая сущность, скажем, Car, которая имеет список составляющих сущностей, например, Колесо.

Теперь я хочу добавить метод ChangeWheel к моей автомобильной сущности. Обратите внимание, что смена колеса фактически не изменяет сущность автомобиля как таковую. Он влияет только на одну из групп в своей коллекции колес. То есть сущность Car имеет атрибут IList. В моей схеме базы данных у меня есть объект car, который не имеет ссылки на Wheels. Вместо этого таблица Wheels имеет внешний ключ CarId.

Когда я меняю колесо на автомобиле, я обновляю конкретную запись колеса. Единственная другая таблица, которую я хочу обновить, - это таблица аудита версий в базе данных.

Если я через NHibernate извлекаю сущность Car из репозитория, вызываю ChangeWheel (...), а затем снова сохраняю, могу ли я настроить NHibernate, чтобы не сохранять новую версию записи Car?

Надеюсь, все это имеет смысл - пожалуйста, спросите, если нет, и спасибо заранее.

Ответы [ 3 ]

1 голос
/ 11 июня 2009

NHibernate сделает это естественно. У вас есть существующее сопоставление или это просто что-то гипотетическое?

1 голос
/ 11 июня 2009

Из документов NHibernate :

  • Когда мы удаляем / добавляем объект из / в коллекцию, номер версии владелец коллекции увеличивается.

Однако ... вы можете попытаться сохранить только что добавленный Wheel, но не сохранит сам Car. Это должно дать желаемый эффект, но NHibernate всегда будет считать Car грязным (следите за управлением ISession)

1 голос
/ 10 июня 2009

NHibernate объединяет свойства, которые являются коллекциями (например, Wheels в вашем случае), со своей собственной коллекцией, которая происходит от Iesi.Collections.Generic.ISet. После этого он может отслеживать изменения в коллекции, и это, конечно, означает, что он выпускает только необходимые обновления.

Имейте в виду, что в этом случае вы должны реализовать Equals и GetHashCode для Wheel. Вот сообщение в блоге о реализации Equals и GetHashCode:

Реализация Equals и GetHashCode

...