私のコードは次のようになります。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実装を返すべきです。 –