NHibernate для выбора с помощью для обмена в PostgreSQL - PullRequest
0 голосов
/ 06 января 2011

Позвольте мне объяснить мой сценарий ...

Скажем, у меня есть две таблицы: "Пути" и "Пакеты" Таблица путей состоит из «PathId», «StartNode», «EndNode» Таблица пакетов состоит из «StartNode», «DestinationNode», «Paths»

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

Чтобы удостовериться, что настройки путей не меняются, пока я вычисляю путь, я считаю, что я должен использовать «SELECT * FROM Paths FOR SHARE» для получения блокировки общего ресурса. Таким образом, до тех пор, пока пути не будут вычислены и транзакция не будет зафиксирована, путь начала / конца не должен изменяться, и в любой момент - вычисленные пути в базе данных всегда действительны.

Вопрос : я пишу программу C # с NHibernate, как мне получить блокировку общего ресурса? Я пытался:

Session.QueryOver<Path>().Lock().Read.List()

но это не делает магию.

Является ли Session.CreateSQLQuery() единственным решением?

1 Ответ

1 голос
/ 06 января 2011

Насколько я знаю, NHibernate в настоящее время не поддерживает SELECT ... FOR SHARE, но поддерживает FOR UPDATE и FOR UPDATE NOWAIT (см. режимы блокировки ), что, конечно, более строгое, ноэто будет работать.

Поскольку NHibernate является проектом с открытым исходным кодом, вы можете предложить это улучшение и, конечно, реализовать его.

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