1

私は流暢な n-hibernate が初めてです。

アプリケーションで流暢な nHibernate を使用して MYSQL データベースに接続しています。結果セットの Mapping クラスは次のように宣言されます。

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; }

    }

私は次のようにMY 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");
    }
}

ストアド プロシージャは、2 つのテーブル "expediads" と "addresses" からデータを返します。しかし、ここで「ProcResult」として宣言されているように、結果セットをカスタムクラスに保存したいと思います。

次のエラーが表示されます:

System.IndexOutOfRangeException: 結果に指定された列が見つかりませんでした: Address2_0_

ありがとう、サローニ

4

1 に答える 1

0

ID はストアド プロシージャの一部として生成されないため、ID を ID 列として宣言する必要はないと思います。単純に id 列として定義してみてください。

      Id(x => x.ID).Column("ID");
于 2013-07-08T20:42:29.750 に答える