私はC#言語を使ってNHibernateを使ってWebアプリケーションを開発しています。しかし、私はいくつかのフィールドとマッピングだけでネイティブのMySQLクエリを構築することはできません。NHibernateとネイティブSQLを使ってテーブルからいくつかのカラムだけを選択
マイのhbm.xmlは、次のようになります。
var session = this.GetFactory().OpenSession();
var query = session.CreateSQLQuery("SELECT * FROM `rule` WHERE currency = :currency AND `range` = :range");
query.SetParameter("currency", this.SearchRoot.Currency.Id);
query.SetParameter("range", this.SearchRoot.Range.Id);
query.AddEntity(typeof(Rule));
var rules = query.List<Rule>();
私は私のアプリを実行すると、すべての罰金です:
<class name="Rule" table="rule">
<id name="Id" column="id" type="int">
<generator class="native"></generator>
</id>
<property name="Name" column="name" type="String" not-null="false"></property>
<property name="Description" column="description" type="String" not-null="false"></property>
<property name="Shops" column="shops" type="String" not-null="false"></property>
<property name="Channels" column="channels" type="String" not-null="false"></property>
<property name="Currency" column="currency" type="int" not-null="false"></property>
<property name="Range" column="range" type="int" not-null="false"></property>
<property name="Created" column="created" type="DateTime" ></property>
<property name="Modified" column="modified" type="DateTime" ></property>
</class>
私のネイティブクエリは次のようになります。しかし、この特定のケースのために、私は次のように変更しましたので、私はちょうど、ID、お店やチャンネルを必要とするすべてのフィールドは必要ありません。
例外の詳細:
var session = this.GetFactory().OpenSession();
var query = session.CreateSQLQuery("SELECT id, shops, channels FROM `rule` WHERE currency = :currency AND `range` = :range");
query.SetParameter("currency", this.SearchRoot.Currency.Id);
query.SetParameter("range", this.SearchRoot.Range.Id);
query.AddEntity(typeof(Rule));
var rules = query.List<Rule>();
をそれから私は、次のエラーを得ました: System.IndexOutOfRangeException:結果で指定された列を見つけることができませんでした:名前
私は、NHibernateが常にテーブルのフィールドとクラスのプロパティを一致させることを理解します。ネイティブクエリに関するドキュメントを読んでいます。
しかし、私は、任意のサンプルまたはこの特定のケースに関連する何かを見つけることができません。
助けが必要ですか?
ありがとうございます。トランスフォーマーはこの場合の解決策です。 – afym