2013-07-08 21 views
1

我是流利n-hibernate的新手。System.IndexOutOfRangeException:在使用n-hibernate的结果中找不到指定列

我使用流利的nHibernate连接到我的应用程序中的MYSQL数据库。

public class ProcResult 
    { 
     public virtual int ID { get; set; } 
     public virtual string Name { get; set; } 
     public virtual string Price { get; set; } 
     public virtual int AddressID { get; set; } 

     public virtual string Address { get; set; } 
     public virtual string Pincode { get; set; } 

    } 

我在我的SQL创建的例程(程序)为::

CREATE DEFINER=`root`@`localhost` PROCEDURE `testProc`() 
BEGIN 
    select a.ID, a.Name, a.Price, a.AddressID, b.Address, b.Pincode from expediads a join adresses b on a.addressid=b.id; 
END 

的hbm.xml文件中为例程(存储过程如下结果集映射类被声明)为:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="TestHBN"> 
    <sql-query name="testProc"> 
    <return alias="PR" class="TestHBN.Models.ProcResult, TestHBN"> 
     <return-property name="ID" column="ID"/> 
     <return-property name="Name" column="Name" /> 
     <return-property name="Price" column="Price" /> 
     <return-property name="AddressID" column="AddressID" /> 
     <return-property name="address" column="address" /> 
     <return-property name="pincode" column="pincode" /> 
    </return> 
    Call testProc; 
    </sql-query> 
</hibernate-mapping> 

而且这对结果集类别的映射:

public class ProcResultMap : ClassMap<ProcResult> 
{ 
    public ProcResultMap() 
    { 

     Id(x => x.ID).GeneratedBy.Identity().Column("ID"); 
     Map(x => x.Name).Column("Name"); 
     Map(x => x.Price).Column("Price"); 
     Map(x => x.AddressID).Column("AddressID"); 
     Map(x => x.Address).Column("Address"); 
     Map(x => x.Pincode).Column("Pincode"); 
    } 
} 

存储过程返回两个表“exdiads”和“adress”中的数据。但是我希望结果集存储在自定义类中,在此处声明为“ProcResult”。

我收到以下错误:

System.IndexOutOfRangeException: Could not find specified column in results: Address2_0_

感谢, 萨洛尼

回答

0

我不认为你想声明的ID作为一个标识列,因为它没有作为的一部分生成存储过程。尝试简单地将其定义为ID列。

 Id(x => x.ID).Column("ID"); 
+0

你是怎么调用存储过程的?它应该通过像Session.GetNamedQuery(“testProc”)这样的命名查询; – rivarolle

+0

我打电话给存储过程为 var list = session.GetNamedQuery(“testProc”)。List(); – Saloni

+0

如果我不将ID声明为标识列,那么我收到一条错误消息:“实体'ProcResult'没有标识映射。使用Id方法映射您的标识属性。例如:Id(x = > x.Id)。“ – Saloni

相关问题