2017-01-05 9 views
4

私は、ODATA v3を使用してさまざまなクライアントに在庫情報などを提供するWebAPIバックエンドを用意しています(使用するコンポーネントではv4を使用できません)。在庫データベースは非常に大きく(100K +レコード)、ODATAはサーバー側のフィルタリング、ページネーションなどに最適で、データ転送をリーンに保ちます。ODATAでNotMappedプロパティをシリアライズする方法

インベントリレコードには、マッピングされていないものの、計算されてクエリが作成されたときにその場に移入されるいくつかのプロパティがあります。例:

問題は、ODATAがNotMappedプロパティを無視するため、クライアントには返されないということです。

私はこれまでに尋ねられたことは知っていますが、それは少し前です。これは今サポートされているか、誰かが単純な回避策を持っていることを期待していました DB)。

(RebateAmountはまだODATAでは含まれません)私はこの醜い回避策を試してみましたが、それはうまくいきませんでした:

private decimal _rebateAmount; 
public decimal RebateAmount { get {return _rebateAmount; } } 

public void SetRebateAmount(decimal amount) 
{ 
    _rebateAmount = amount; 
} 

は非DBのプロパティを含むように(好ましくは簡単な)方法はありますODATA結果セット?これは私のシナリオで有用であるためには、編集2017年1月7日

は、ODATAもそうでない場合は、自動生成された(クライアント側)プロキシクラスは含まれません、メタデータで計算フィールドを含む必要がありますそれら。

答えて

2

追加の計算プロパティを持つDTOオブジェクトを使用してOData EDMModelを作成する方法があります。

これを行うための実装の詳細を持って、この答えを確認してください:Mapping OData query against a DTO to another entity?

DTOは、データベース・サーバ で見ることでマッピングできるかOdataQueryOptionsを使用して、コントローラで計算することができます。

+0

私はあなたの提案を実装し始めましたが、かなり複雑なものが追加されていました(私はこれ以上快適です)。これを達成するための侵略的な方法がなければ、私は弾丸を噛んでDBにプロパティを入れます。しかし、あなたの提案に感謝! – Lars335

+0

私はODATA 3(私は質問を更新しました)を使用していることを忘れていましたので、これはあなたの提案を実装しようとしたときに少なくとも私が持っていた問題を説明しています。いずれにせよ、私は可能な解決策を提案する時間を取ってあなたをupvotedしています。 – Lars335

+0

これまで、このようなケースを実装しなければなりませんでしたが、残念ながら、これに対する簡単な解決策が見つからず、カスタムEdmModelを使用するためにOdataQueryOptionsを使用してカスタムIQueryableを作成しました。私はこの問題について、より良い解決策に関する最新情報を求めます。 – Ankit

0

これは古い投稿ですが、WebApiConfigファイルでは次の行を追加するだけで、 "NotMapped"プロパティが公開されます。

builder.StructuralTypes.First(t => t.ClrType == typeof(YourModel)).AddProperty(typeof(YourModel).GetProperty("RebateAmount")); 

ここで、 "builder"はIEdmModelです。あなたの "GetEdmModel"メソッドの可能性が最も高いです。

関連する問題