NHibernate - Есть ли способ предотвратить увеличение версии? - PullRequest
1 голос
/ 29 мая 2010

Из соображений производительности иногда я хочу обновить сущности без какого-либо увеличения версии (или проверки версии). С LINQ TO SQL я просто оставил версию без изменений, и она работала нормально. Возможно ли такое поведение в NHibernate?

Ответы [ 2 ]

1 голос
/ 30 мая 2010

Некоторые модификации не являются действительно важно. Итак, я хочу сделать эти модификации просто последние выиграть.

Хотя транзакции должны быть атомарными , так что мы можем говорить в терминах временного порядка, это не просто, и всегда немного сложно говорить о первом / последнем, когда транзакции задействованы. Э.Г.

T1: start
T1: read row X with value A
T2: start
T2: read row X with value A
T2: write row X with value A2
T2: commit
T1: write row X with value A1
T1: commit

Пока T2 начинается после T1, изменение A2 теряется. Какая транзакция является "последней"? Тот, который начался последним, или тот, который закончился последним? (Фиксация действительно атомарная, но транзакции все еще имеют длительность, из-за чего их трудно рассуждать.)

Оптимистическая или пессимистическая блокировка предназначена для того, чтобы избежать такой ситуации, чтобы мы могли лучше мыслить в терминах порядка транзакций.

Тем не менее, чтобы вернуться к вашему вопросу, если это действительно то, что вам нужно, вы можете попытаться отобразить одну и ту же таблицу базы данных дважды в двух сущностях: в одной сущности у вас есть @version, а в другой нет. Но это может быть довольно запутанным.

0 голосов
/ 03 июня 2010

Я полагаю, что вы, вероятно, не хотите отключать все оптимистические блокировки для этих объектов (иначе просто не присваивайте им свойство версии), но вы хотите, чтобы некоторые свойства не вызывали приращение версии. Это поддерживается с помощью «optimistic-lock», проверьте: http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-property

optimistic-lock (необязательно - по умолчанию true): указывает, что для обновления этого свойства требуется или не требуется получение оптимистической блокировки. Другими словами, определяет, должно ли происходить увеличение версии, когда это свойство загрязнено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...