У меня есть объект с несколькими полями.Есть два типа действий, которые могут быть выполнены над ним: длинное, обычно инициируемое пользователем, и короткое, которое периодически запускается системой.Оба они обновляют сущность, но затрагивают разные поля.
Не может быть двух одновременных длинных операций или двух одновременных коротких операций.Но система может запланировать короткую операцию, когда выполняется длинная операция, и эти две операции должны выполняться одновременно.Поскольку они затрагивают разные поля, я считаю, что это возможно.
Я думаю, что отслеживание изменений NHibernate должно помочь, то есть, если один сеанс загружает объект и обновляет некоторые поля, а другой - тот же объекти обновляет разные поля, тогда два не будут сталкиваться.Однако я чувствую, что не должен полагаться на это, потому что это звучит как «оптимизация» или «детали реализации».Я склонен рассматривать отслеживание изменений как оптимизацию для уменьшения трафика базы данных, я не хочу, чтобы функциональность системы зависела от него.Кроме того, если я когда-нибудь решу реализовать оптимистический параллелизм для этой сущности, то я рискую получить исключение StaleObjectException, даже если могу гарантировать, что в действительности нет коллизии.
Каков наилучший способ добиться этого?Должен ли я разделить сущность на две части?Разве это не может повлиять на согласованность базы данных (например, что если в БД находится только одна «половина» сущности)?Могу ли я использовать NHibernate, чтобы явно установить только одно поле объекта?Я ошибаюсь, не желая полагаться на отслеживание изменений для достижения функциональности?
Если это имеет значение, я использую Fluent NHibernate.