내 코드는 다음과 같습니다현재 세션 트랜잭션을 커밋하지 않음으로써 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는이이 명령을 요구를 명령에 할당 된 연결이 보류중인 로컬 트랜잭션에있을 때 트랜잭션. 명령의 트랜잭션 특성 이 초기화되지 않았습니다.
그러나 전체 작업을 완료하기 전에 트랜잭션을 커밋하지 않으려합니다. 나는 이것을 어떻게 얻을 수 있을까 ??
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.Engine.ISessionImplementor 인터페이스 비고 NHibernate에 구현 : 이 방법은 래퍼 implementions에서 세션의 NHibernate에 구현을 얻기 위해 제공됩니다. NHibernate.ISession 인터페이스의 구현자는이 메소드의 NHibernate 구현을 리턴해야한다. –