Mysql System.IndexOutOfRangeException:在使用n-hibernate的结果中找不到指定的列

Mysql System.IndexOutOfRangeException:在使用n-hibernate的结果中找不到指定的列,mysql,nhibernate,asp.net-mvc-4,orm,fluent-nhibernate,Mysql,Nhibernate,Asp.net Mvc 4,Orm,Fluent Nhibernate,我不熟悉流利的n-hibernate 我正在使用fluent nHibernate连接我的应用程序中的MYSQL数据库。结果集的映射类声明如下: public class ProcResult { public virtual int ID { get; set; } public virtual string Name { get; set; } public virtual string Price { get; set; }

我不熟悉流利的n-hibernate

我正在使用fluent 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文件为:


调用testProc;
这也是结果集类的映射:

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");
    }
}
公共类proclesultmap:ClassMap
{
公共proclesultmap()
{
Id(x=>x.Id).GeneratedBy.Identity()列(“Id”);
Map(x=>x.Name).Column(“Name”);
映射(x=>x.Price)。列(“价格”);
Map(x=>x.AddressID).Column(“AddressID”);
映射(x=>x.Address)。列(“地址”);
Map(x=>x.Pincode).Column(“Pincode”);
}
}
存储过程从两个表“expediads”和“address”返回数据。但我希望结果集存储在自定义类中,在这里声明为“proclesult”

我遇到以下错误:

System.IndexOutOfRangeException:在中找不到指定的列 结果:地址2_0_

谢谢,
Saloni

我认为您不希望将ID声明为标识列,因为它不是作为存储过程的一部分生成的。尝试简单地将其定义为id列

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

如何调用存储过程?它应该通过一个命名查询,比如Session.GetNamedQuery(“testProc”);我以var list=session.GetNamedQuery(“testProc”).list()的形式调用存储过程;如果我没有将ID声明为标识列,那么我会收到一条错误消息:“实体‘proclesult’没有映射ID。请使用ID方法映射您的标识属性。例如:ID(x=>x.ID)。”在这种情况下,请尝试从中删除GeneratedBy.identity()。我已从中删除GeneratedBy.identity(),但它仍然给我相同的错误:在结果中找不到指定的列:Address2\u 0_
      Id(x => x.ID).Column("ID");