2

SQL クエリの結果を表すために使用するエンティティ クラスがあります。以下に示すクラスのマッピング。しかし、私が知る限り、nhiberate は実際のデータベース テーブルがあるかのようにマッピングを扱いますが、実際には存在しません。この場合、このエンティティを表すデータベースには何もありません。これを使用してクエリをマップしていますが、同じことがビューにも当てはまります。マッピングによって表されるテーブルがないことを nhibernate に示す方法はありませんか?

<class name="Models.UserTransaction"> <!-- Defaults table name same as Entity even though table doesn’t exist -->
  <id name="Id">
    <column name="Id" not-null="true" unique="true" />
    <generator class="native" />
  </id>
  <property name="TransType" />
  <property name="Date" />
  <property name="Amount" />
  <property name="Balance" />
</class>

これは私がマッピングしているクエリで、ユーザー定義のテーブルを使用しています。コピーした例が見えたとしても、マッピングがないと機能しませんでした。

  <sql-query name="UserTransactions">
    <query-param name="userId" type="string" />
    <return class="Models.UserTransaction" alias="userTx">
      <return-property name="TransType" column="TransType" />
      <return-property name="Id" column="Id" />
      <return-property name="Date" column="TransDate" />
      <return-property name="Amount" column="Amount" />
      <return-property name="Balance" column="Balance" />
    </return>
    <![CDATA[
      SELECT userTx.[Type] as TransType, userTx.[Id] as Id, userTx.[Date] as TransDate, userTx.[Amount] as Amount, userTx.[Balance] as Balance
      FROM dbo.User_AccountStatement(:userId) userTx
    ]]>
  </sql-query>
4

2 に答える 2

1

db ビューがある場合は、nhibernate を使用してそれにマップできますが、クエリの射影フィールドを格納するだけであれば、マップはまったく必要ありません。

このデータをどのように照会していますか?

基準 API を使用している場合は、resultstransformer を使用して、返されたオブジェクト配列をクラスにマップできます。タイプは、プロジェクションのクラス間で一致する必要があります。

linq プロバイダーを使用している場合は、クラスに直接投影できます。だからあなたはこのようなものを持っているでしょう

from Session.Query where s.some-property== "some-value" select new your-type { some-property-on-your-type = s.some-property, some-other-property-on-your -type = s.some-other-property }

データベース内のオブジェクトにマッピングしていないため、データベースへのマッピングを書き込む必要はありません。

于 2012-04-30T15:18:21.220 に答える
0

少なくとも、マッピングのテーブル名としてビューを指定する必要があると思います。ビューには、クエリと同じ結果の列が含まれている必要があります (クエリが返す可能性のある行が返されることを願っています)。

次に、次のことができるようになります。

于 2012-04-30T11:02:31.423 に答える