モデルの生成
あなたはできる:
- ASP.NET Web APIの規則モデル ビルダーを使用します。これにより、EF 独自の規則モデル ビルダーが生成するものとは異なるモデルである EdmLib が生成され
IEdmModel
ます。ただし、モデル優先またはデータベース優先を使用している場合は、この質問を参照してください。この方法は非常に後ろ向きに見えますが、実際はそうですが、ほとんどの場合うまくいきます。
- EF モデルをシリアル化し、として再構築します(この質問
IEdmModel
を参照してください)。繰り返しますが、これは本当に非効率的です。モデル優先またはデータベース優先を使用している場合は、EDMX ファイルを逆シリアル化して. それでも内部で異なるモデルを生成しますが、少なくとも CDSL は CLR コード規則よりも安定した形式であるため、2 つの異なる規則ベースのモデル ビルダーを使用する場合よりも驚くことは少ないでしょう。IEdmModel
これは、ASP.NET Web API OData 拡張機能が EdmLib を使用しているのに対し、EF は独自のコードを使用しており、それらを連携させる予定がないためです。興味があれば、この暴言が役に立つかもしれません。
API での作業
一意のソースからモデルを生成したら (単一の場所からモデルを操作できるようにするため)、基本的にエンティティごとにコントローラーを作成する必要があります。Web API のポイントは、物事を自動的に構築することではなく、開発者に柔軟性を提供することです。は冗長性を減らすのEntitySetController
に役立ちますが、そのままですべてを提供できるわけではありません。
一歩後退する
上記の暴言では、サービス層API とデータ層 APIの違いについても説明しています。ASP.NET Web API はサービスに適していますが、OData はサービスを厄介なものにします。一方、OData はデータ アクセスを簡単にし (本質的には RESTful SQL に似ています)、データ モデルに直接接続されているため、WCF Data Services で見たように多くのことを自動化できます。OData 拡張機能を備えた ASP.NET Web API はその中間に位置し、その価値は普遍的に合意されているわけではありません (ただし、サービス API で特定の OData URI 構文を使用することは確かに便利です)。
ASP.NET Web API をめぐる最近の話題にあまり熱狂しないでください。ASP.NET Web API と WCF Data Services は非常に異なる獣であり、設計の異なるレイヤーで実行されます。実際、多層アーキテクチャでは、ASP.NET Web API を使用して構築されたサービス API が、WCF Data Services を使用して構築された OData API の上に置かれていることがよくわかります。
私のアドバイスは、構築しようとしているものについて慎重に検討し、その答えに応じて、ASP.NET Web API を選択し、公開する API がデータ中心の OData API とは大きく異なるという事実を受け入れるか、固執するかです。 WCF データ サービスを使用します。
可能なプラン
「非 CRUD Web/RESTful/ハイパーメディア API」などの用語を検索したり、あまりデータ指向でない API を推奨する ServiceStack などの製品を比較したりすることで、Web 上のサービス層 API に関する多くの資料を見つけることができます。
プロジェクトの性質についてまだ確信が持てない場合は、プロトタイプを作成してください。
- Web API を使用した本質的に同一のコントローラーが多数あり、それぞれが正確に 1 つのエンティティにマップされている場合、API は非常にデータ指向です。WCF Data Services を使用します。
- WCF Data Services で多数の OData アクションと厄介なエンティティが発生する場合は、API のサーバー側にドメイン ロジックを追加する必要があり、データ指向では十分ではありません。Web API を使用します。ここでの経験則は、SQL DBMS でストアド プロシージャを扱うのと同じように OData アクションを扱うことです。実際、OData サーバーは DBMS として扱ってください。SQL インターフェイスの背後に配置しない場合は、OData インターフェイスの背後に配置しないでください。
重要(更新)
2014 年 3 月 27 日に、Microsoft は ASP.NET Web API を支持して WCF Data Services を廃止することを発表しました。ここで紹介した「データ層」のユース ケースを処理するために、Microsoft は ASP.NET Web API の拡張を計画していると述べています。いくつかのコミュニティ の取り組みも進行中です。WCF Data Services もある時点でオープンソース化されるため、新しいメンテナーが引き継ぐ可能性はありますが、確実ではありません。