У меня есть функция, используемая для импорта данных, каждая запись данных будет автоматически генерировать № базы на основе максимального № в базе данных.Я использовал ключ, чтобы проверить, вставляет ли какой-либо запрос, все остальные запросы будут отклонены.Ключ будет освобожден после выполнения транзакции Commit () или имеет исключение.Иногда, проблема возникает, когда есть два последовательных вызова запроса к этой функции, номер был дубликатом.Я предполагаю, что после того, как я вызову commit и отпущу ключ, данные еще не вставлены, и следующий запрос получит неправильный номер.
try {
if (mInvoiceList.Length > 50) // this is List data
this.isStateLess = true;
if(hasKey)
throws new Exception("reject");
foreach(mInvoiceList) {
//get Maximum no and set to each record (next No = max + 1)
}
if (!this.isStateLess)
{
NHibernateSessionManager.Instance.CommitTransactionOn(sessionFactoryConfigPath);
}
else
{
NHibernateSessionManager.Instance.CommitTransactionStateLessOn(sessionFactoryConfigPath);
}
}
catch(Exception e) {
//release Key
}
finally {
//release Key
}
Есть какие-нибудь идеи для этой проблемы?Большое спасибо за помощь!