Мой код выглядит следующим образом:Как передать DataTable в качестве параметра хранимой процедуры, не совершая транзакции текущего сеанса?
public void InsertSampleData(DataTable tempTable)
{
session.Transaction.Commit();
var connection = session.GetSessionImplementation().Connection;
using (var sqlConnection = (SqlConnection)connection)
{
using (var cmd = sqlConnection.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dbo.insertData";
cmd.Parameters.Add("@sItems", SqlDbType.Structured);
var sqlParam = cmd.Parameters["@Items"];
sqlParam.Direction = ParameterDirection.Input;
sqlParam.TypeName = "[dbo].[DataItemType]";
sqlParam.Value = tempTable;
cmd.ExecuteNonQuery();
}
}
}
код работает нормально, но если я не совершить сделку он бросает исключение, как показано
System.InvalidOperationException: ExecuteNonQuery требует команды, чтобы иметь когда соединение, назначенное команде , находится в ожидающей локальной транзакции. Свойство Transaction команды не было инициализировано.
Но я не хочу, чтобы транзакция была совершена еще до завершения всей операции. Как я могу это достичь?
Что возвращает GetSessionImplementation? – Baz1nga
@ Baz1nga его возвращает что-то, что реализует [ISession] (http://mausch.github.com/nhibernate-3.2.0GA/html/fcb2b8a0-0c03-8056-91a1-3b26691eaffe.htm) его вещь nhibernate –
NHibernate.Engine .ISessionImplementor GetSessionImplementation() Член NHibernate.ISession Основная информация: Получает выполнение сеанса. Возвращает: NHibernate реализация интерфейса NHibernate.Engine.ISessionImplementor Примечания: Этот метод предоставляется для того, чтобы получить реализацию NHibernate сессии из оберток implementions. Разработчики интерфейса NHibernate.ISession должны вернуть реализацию этого метода NHibernate. –