WCFデータサービスODATAプロバイダーをWeb APIに変換する最も簡単な方法は何ですか?

StackOverflow https://stackoverflow.com/questions/19825159

質問

現在、現在のWCFデータサービスODATAプロバイダーをWeb API Odataに変換する可能性を検討しています。

Web APIのODATA実装で少し混乱しています。 WCFデータサービスを使用すると、SQL Server BackEndから多数のテーブルを公開するADO.NETエンティティモデルの上部にあります。つまり、WCFDにADOモデルを生成し、標準を介してすべてのテーブルにアクセスできるようにします。 odata構文。

これまでにすべての読み取りからWeb APIを使用すると、公開したいすべてのテーブル/オブジェクトのコントローラーまたは個別のアクションを作成しますか?私は何かが足りませんか? ODATA Web APIコントローラーがADOデータモデルからモデル全体を公開できる方法はありますか?すべてのテーブルに対してアクションを作成しなければならないのは、混乱と過剰なことです。

現在、テーブルを追加する必要がある場合は、EDMXにマッピングするだけで、WCFDはモデルのコンテキスト全体にマッピングされているため、自動的に露出します。

役に立ちましたか?

解決

モデルの生成

あなたはできる:

  • 使用 コンベンションモデルビルダー ASP.NET Web APIから。これにより、EF独自のコンベンションモデルビルダーが生成するものとは異なるモデルが生成されます。EDMLIB IEdmModel. 。見る この質問 ただし、モデルファーストまたはデータベースファーストを使用している場合。この方法は本当に後方に見えますが、そうですが、ほとんどが機能します。
  • EFモデルをシリアル化し、それをanとして再構築します IEdmModel (見る この質問)。繰り返しますが、これは本当に非効率的です。モデルファーストまたはデータベースファーストを使用している場合は、EDMXファイルをゆるくしてビルドするだけです。 IEdmModel. 。それはまだ内部的に異なるモデルを生成しますが、少なくともCDSLはCLRコードコンベンションよりも安定した形式であるため、2つの異なるコンベンションベースのモデルビルダーを使用する場合に得られるよりも驚きが少ないでしょう。

この理由は、ASP.NET Web API ODATA拡張機能がEDMLIBを使用し、EFは独自のコードを使用し、 それらを一緒に動作させる計画はありません. 。多分あなたは見つけるでしょう この暴言 興味がある場合は便利です。

APIの作業

一意のソースからモデルを生成したら(単一の場所からモデルで作業できるように)、基本的にエンティティごとにコントローラーを作成する必要があります。 Web APIのポイントは、自動的に物事を構築することではなく、開発者に柔軟性を提供することです。 EntitySetController 冗長性を減らすのに役立ちますが、箱から出してすべてを提供するわけではありません。

一歩後退します

上記の暴言では、私は サービス層 APIおよびa データ層 API。 ASP.NET Web APIはサービスに適していますが、Odataはサービスを厄介にします。一方、Odataはデータアクセスを簡単に(本質的にRestful SQLのようなもの)、データモデルに直接接続することで、WCFデータサービスで見たように多くのことを自動化できます。 Odata拡張機能を備えたASP.NET Web APIは中央にあり、その値は普遍的に合意されていません(サービスAPIでOdata URI構文の特定のビットを使用することは確かに有用です)。

ASP.NET Web APIの最近の話題にあまりにも誇張されないでください。ITとWCFデータサービスは非常に異なる獣であり、デザインの異なるレイヤーで実行されます。実際、マルチ層アーキテクチャでは、WCFデータサービスを使用して構築されたODATA APIの上にあるASP.NET Web APIを使用して構築されたサービスAPIを非常によく見ることができます。

私のアドバイスは、あなたが何を構築しようとしているかについて慎重に考えることであり、答えに応じて、ASP.NET Web APIを選択して、あなたが公開するAPIがデータ中心のODATA APIとは大きく異なるか、スティックを受け入れるかのいずれかですWCFデータサービスを使用。

可能な計画

「非クルーなWeb/Restful/HyperMedia API」などの用語を検索するか、データ指向のAPIを少なくするServiceStackなどの製品を比較することにより、Web上のサービス層APIに関する多くの資料をWebで見つけることができます。

あなたがあなたのプロジェクトの性質についてまだわからないなら、 プロトタイプ.

  • Web APIを使用した本質的に同一のコントローラーの束になってしまうと、それぞれが正確に1つのエンティティにマッピングされた場合、APIはデータ指向です。 WCFデータサービスを使用してください.
  • WCFデータサービスを備えた多くのODATAアクションと厄介なエンティティになってしまうと、APIのサーバー側でより多くのドメインロジックが必要になります。データ指向は十分ではありません。 Web APIを使用してください. 。ここでの経験則は、SQL DBMでストアドプロシージャを扱うのと同じようにOdataアクションを扱うことです。実際には、odataサーバーをDBMSとして扱います。なぜなら、それが彼らのものだからです。 SQLインターフェイスの後ろに配置しない場合は、ODATAインターフェイスの後ろに置かないでください。

重要(更新)

2014年3月27日にWCFデータサービスが 製造中止 ASP.NET Web APIを支持するMicrosoftによる。ここで公開した「データレイヤー」のユースケースを処理するために、MicrosoftはASP.NET Web APIを拡張する予定であると述べています。いくつか コミュニティ 尽力 また、進行中です。 WCFデータサービスもある時点でオープンソースを受けるため、新しいメンテナーが買収することは不可能ではありませんが、不確かです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top