sql-server - 从 NHibernate 调用 SQL Server 存储过程时,我可以将列表或自定义数据类型作为参数传递吗

标签 sql-server nhibernate stored-procedures packages

我用 Oracle 对此进行了测试。它工作正常。因为在那里我有包并在包体中定义了关联数组类型和存储过程。

虽然 SQL Server 中没有包的概念。如何在 SQL Server 中完成这项工作?

域对象开始

[Serializable]
public class Employee
{
    public virtual int EmployeeId
    {
        get;
        set;
    }
    public virtual string EmployeePassword
    {
        get;
        set;
    }

    public virtual string EmployeeName
    {
        get;
        set;
    }

    public virtual int TeamAssociatedWith
    {
        get;
        set;
    }
    public virtual string IsCaptain
    {
        get;
        set;
    }
    public virtual int NumberOfMOM
    {
        get;
        set;
    }
    public virtual int Balance
    {
        get;
        set;
    }       
}

制图
<?xml version="1.0" encoding="utf-8" ?>  
 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">  
   <class name="DomainObject.Employee,DomainObject" table="Employee">  
   <id name="EmployeeId" column="EMP_ID" type="int" unsaved-value="0">  
     <generator class="native">         
     </generator>  
   </id>  
   <property name="EmployeePassword" column="EMP_PASSWORD" type="string"/>  
   <property name="EmployeeName" column="EMP_NAME" type="string"/>    
   <property name="TeamAssociatedWith" column="TEAM_ASSOCIATED_WITH" type="int"/>  
   <property name="IsCaptain" column="IS_CAPTAIN" type="string"/>  
   <property name="Balance" column="BALANCE" type="int"/>  
   <property name="NumberOfMOM" column="NO_OF_MOM" type="int"/>  
 </class>  
</hibernate-mapping>  

存储过程
CREATE PROCEDURE [dbo].[some_sp] @id IntTable READONLY   
AS  
SELECT EMP_ID,EMP_NAME,EMP_PASSWORD,
TEAM_ASSOCIATED_WITH,IS_CAPTAIN,NO_OF_MOM,BALANCE 
FROM employee; 
GO
ISQLQuery final = eventhistorysession.CreateSQLQuery("EXEC TestCustom @location = :id");
IQuery result = final.SetStructured("id", dt);
IList finalResult = result.List();

最佳答案

在 SQL Server 中,存储过程可以具有 table 类型的参数,可用于模拟 Oracle 关联数组功能。在您的情况下,您将发送一个单行多列的“表格”。有a good example for NHibernate here在接受的答案中。

关于sql-server - 从 NHibernate 调用 SQL Server 存储过程时,我可以将列表或自定义数据类型作为参数传递吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5831167/

相关文章:

nhibernate - NHibernate 有没有办法从 View 中通知查询缓存失效?

java - 在 Java 中调用存储过程,使用 Liferay 框架的 JSP

c# - 如何有效地从存储过程中检索数千行

php - Laravel + 存储过程 : Error Packets out of order

c# - FirebirdSql (C#) 比在 FlameRobin 中执行脚本慢

c# - 需要一种从具有层次结构数据的表中获取记录 ID 的方法

sql-server - 在 SQL Server 中以 XML 数据类型存储存储过程的文本

php - 使用 PHP 快速将 SQL 查询中的所有数据放入数组中

c# - CQRS 中的验证和同步命令

nhibernate - 在具有不同列名的不同表上使用 ICompositeUserType