1

これがNHibernateに固有のものであるとは思えません。しかし、私は次のようなコードを持っています....

public class ClientController : ApiController
    {
        // GET /api/<controller>
        public IQueryable<Api.Client> Get()
        {
            return Repositories.Clients.Query().Select(c => Mapper.Map<Client, Api.Client>(c));
        }

私は基本的に、Odata 基準を使用してデータベースにクエリを実行したいと考えています。関連する「Client」オブジェクトを取得し、それらを DTO の「Api.Client」に変換します。

しかし...コードはそのままでは機能しません。NHibernate は Mapper で何をすべきかわからないため...Select の前にクエリが来ることを本当に望んでいます。しかし、最初に Odata Query を取得できるかどうかわかりません。

やればうまくいく

return Repositories.Clients.Query().Select(c => Mapper.Map<Client, Api.Client>(c)).ToList().AsQueryable();

しかし、OData クエリを実行するためにデータベースからすべてのクライアントを取得する必要があるため、これは少し面倒です。

ODataクエリの後に「選択」を行う方法はありますか? またはこれにアプローチする別の方法はありますか?

4

3 に答える 3

1

まだテストしていませんが、オープン ソース プロジェクトのNHibernate.ODataが役に立つかもしれません。

于 2012-04-26T01:02:15.827 に答える
0

Mapper.Map問題は、 (SQL に変換された) NH 呼び出し内で C# コード ( )を実行しようとしていることです。

Api.Client を手動でマップするか、 を返す Mapper 実装を作成して、Expression<Func<Client, Api.Client>>それをパラメータとして に直接渡す必要がありますSelect()

それでも、NHibernate が翻訳してくれるかどうかはわかりません。しかし、あなたは試すことができます。

于 2012-04-24T15:31:13.873 に答える