nhibernate один сеанс тот же idbconnection
У меня есть некоторый код, делающий 2 раза session.Get(id) на том же ISession. Я вижу, что ISession создает 2 idbconnections. Я думаю, это из-за какой-то конфигурации. Я хотел бы, чтобы он делал выборку при том же idbconnection. Как?
1 ответ
Если оба Get
операции находятся в одной транзакции, они будут разделены IDbConnection
, В противном случае вы получите неявные транзакции, а NHibernate откроет и закроет IDbConnection
для каждого запроса. В общем, вы должны попробовать сделать что-то вроде:
using (var tx = session.BeginTransaction())
{
var customer = session.Get<Customer>(123);
var order = session.Get<Order>(456);
// do stuff
tx.Commit();
}
Использование неявных транзакций не рекомендуется:
Когда мы не определяем наши собственные транзакции, он возвращается в режим неявных транзакций, где каждый оператор для базы данных выполняется в своей собственной транзакции, что приводит к большим затратам на производительность (время базы данных для создания и разделения транзакций) и снижению согласованности,
Даже если мы только читаем данные, мы должны использовать транзакцию, потому что использование транзакций гарантирует, что мы получим согласованные результаты из базы данных. NHibernate предполагает, что весь доступ к базе данных осуществляется в рамках транзакции, и настоятельно не рекомендует использовать сеанс без транзакции.