转:NHibernate 存储过程

http://stackoverflow.com/questions/928847/how-to-get-the-return-value-from-a-sql-server-stored-procedure-into-nhibernate

 

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DocumentManagement.Data" namespace="DocumentManagement.Data.Repositories" >

<sql-query name="GetDocument">
<return class="DocumentManagement.Core.Models.PhysicalDocument, DocumentManagement.Core">
<return-property column="DocId" name="Id" />
<return-property column="Filepath" name="Filepath" />
<return-property column="Filename" name="Filename" />
</return>
exec Investor_GetDocumentById :userId, :docId
</sql-query>

</hibernate-mapping>


public PhysicalDocument GetDocumentPath(int userId, int docId)
{
var query = Session.GetNamedQuery("GetDocument")
.SetInt32("userId", userId)
.SetInt32("docId", docId).List<PhysicalDocument>();

return query[0];
}

ISession session = sessionFactory.GetSession();

using(ITransaction transaction = session.BeginTransaction())
{
IDbCommand command = new SqlCommand();
command.Connection = session.Connection;

// Enlist IDbCommand into the NHibernate transaction
transaction.Enlist(command);

command.CommandType = CommandType.StoredProcedure;
command.CommandText = "dbo.SetUserInfo";

// Set input parameters
var parm = new SqlParameter("@UserID", SqlDbType.Int);
parm.Value = 12345;
command.Parameters.Add(parm);

// Set output parameter
var outputParameter = new SqlParameter("@Quantity", SqlDbType.Int);
outputParameter.Direction = ParameterDirection.Output;
command.Parameters.Add(outputParameter);

// Set a return value
var returnParameter = new SqlParameter("@RETURN_VALUE", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(returnParameter);

// Execute the stored procedure
command.ExecuteNonQuery();
}

posted @ 2013-08-10 15:33  庚武  Views(228)  Comments(0Edit  收藏  举报