2013-07-08 20 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

相關問題