【问题标题】:While calling SQL Server stored procedure from NHibernate can I pass list or custom data type as a parameter从 NHibernate 调用 SQL Server 存储过程时,我可以将列表或自定义数据类型作为参数传递吗
【发布时间】:2011-04-29 11:01:36
【问题描述】:

我使用 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 nhibernate stored-procedures packages


    【解决方案1】:

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

    【讨论】:

    • @Sixto:感谢您的回复。我尝试复制相同的示例。但是在触发查询时遇到问题。它抛出异常,无法找到映射到表的域对象的属性数据库。
    • @Sixto: 更新了 MS SQL 2008 中的 DomainObject 和 Mapping and Procedure 问题
    • 能否请您将异常的详细信息作为问题的更新?听起来您基本上可以正常工作,但问题是映射配置。了解哪个属性出现故障将有助于解决此问题。
    • @SIXTO:它工作正常。我稍微更改了我的代码,它在更新相关代码时工作正常
    • @SIXTO:你能帮我用 oracle 做同样的事情吗?在 oracle 中,我使它与关联数组一起使用。但是我想像我们在 SQL 中使用数据表一样传递自定义数组。
    猜你喜欢
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    相关资源
    最近更新 更多