2013-03-29 5 views
0

У меня есть общая dll, на которую ссылаются настольные приложения и веб-приложения. Один из методов создает 3 объекта и вставляет их в БД в транзакции.Операция NHibernate не работает должным образом на Postgres

Однако, когда я вызываю этот метод одновременно с веб-приложением и настольным приложением, объекты не вставлены 3by3 ... их порядок смешанный (1 из настольного приложения, затем 1 из веб-приложения и т. Д.).

Является ли мой код ОК? Есть ли какое-то отношение к сопоставлению или nhibernate cfg ??? Спасибо вам большое заблаговременно.

   Notifications not = new Notifications(); 
       not.Notes = applicationName; 
       not.GeneratedTime = DateTime.Now; 
       using (var session = SessionManager.OpenSession()) 
       using (var transaction = session.BeginTransaction()) 
       { 
        // do what you need to do with the session 
        session.Save(not); 

       not = new Notifications(); 
       not.Notes = applicationName; 
       not.GeneratedTime = DateTime.Now; 

        session.Save(not); 

       not = new Notifications(); 
       not.Notes = applicationName; 
       not.GeneratedTime = DateTime.Now; 

        // do what you need to do with the session 
        session.Save(not); 
        transaction.Commit(); 
       } 
+0

Строки в реляционной базе данных, *** НЕ *** «отсортировано». Порядок, в котором они хранятся, совершенно не имеет значения. Просто убедитесь, что вы применили «ORDER BY», когда * извлекаете * данные. Это можно сделать, например, столбец временной метки, который хранит время, когда была вставлена ​​строка. –

ответ

1

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

Это просто не соответствует действительности (если вы не используете какой-то определенный уровень изоляции транзакций, исключительно заблокировать всю таблицу, и т.д. ... но давайте просто скажем, что это не так)

+0

Большое спасибо, что помогает. – nanek

Смежные вопросы