1

データベース(SQL Server 2008 Express)を作成し、VisualStudio2010のORDesignerを使用してLINQtoSQLエンティティ(LinqEntitiesDataContextと呼ばれる)を作成しました。次に、リポジトリクラスと関連するIRepositoryインターフェイスを作成しました。データエンティティへの有意義なアクセスを提供する、素晴らしくシンプルなCRUDメソッドの例。たとえば、次の方法があります。

IQueryable<User> QueryUsersByType(UserTypeEnum userType)

そして別の:

void CreateUserWithDefaultType(User user)

ここで、このリポジトリを「ネットワークを介して」利用できるようにし、WCFデータサービス(OData)を使用してアクセスを提供したいと思います。しかし、私が見たODataのすべての例は、エンティティ自体(Usersエンティティなど)への直接アクセスを提供することになります。これは、データコンテキストクラスにIUpdatableを実装させ、このデータコンテキストクラスを参照するWCFデータサービスを作成することによって行われます。私の場合、それはLinqEntitiesDataContext IUpdatableを作成し、それをサービスタイプとして使用することを意味します。これにより、リポジトリクラスの使用が完全に回避されます。

データサービスにリポジトリを公開させる必要があると感じました。

DataService<Repository>  // *Not* DataService<LinqEntitiesDataContext>

ただし、既存の更新メソッド(CreateUserWithDefaultTypeなど)の呼び出しを避けて、リポジトリにIUpdatableを実装させる必要があります。

ここで何が欠けていますか?エンティティレイヤーではなくリポジトリレイヤーを公開して、これを正しく行う方法の良い例はありますか?

4

3 に答える 3

4

@Bullはここでは正しい方向に進んでいたと思いますが、もう少し答えを作成したいと思います。

彼が言ったように、ODataは主に、事前定義されたメソッドではなく、エンティティを操作するように設計されています。たとえば、最初の例を実現するには、IQueryable of Userを公開するだけです。これにより、任意のODataクライアントがなどのURLを形成できるようになりますhttp://yourdomain/Users?$filter=UserType eq Administrator。WCF Data Servicesクライアントを使用している場合は、のような操作を可能にするLINQプロバイダーがありますcontext.Users.Where(u => u.UserType == "Administrator")。(また、WCF Data Servicesは現在、サービスモデルの列挙型をサポートしていないことに注意してください。)

同様に、2番目のメソッドは通常http://yourdomain/Users(最初の例で見たのと同じIQueryable of User)へのPOSTであり、モデルまたはデータベースでデフォルトのタイプを設定します。

リポジトリを本当に使用したい場合は、Alexのブログ(http://blogs.msdn.com/b/alexj/archive/2010/01/07 )で説明されているように、完全なカスタムデータサービスプロバイダーを処理するのがおそらく最善でしょう。 /data-service-providers-getting-started.aspx

最後のポイント-近い将来、プロバイダーを公開したいと考えています。これにより、ここで達成しようとしていることが大幅に簡素化されます。この投稿は、その特定の機能の重要性に関する別の参照カウントとしてカウントされます。:)

HTH、マーク

于 2012-06-28T21:32:38.327 に答える
1

私はあなたが絵を逃していると思います。ODataは、エンティティをフィードとして公開するためにあります。OdataはWCFデータサービスとも呼ばれ、ODATA/WCFデータサービスの基本的な全体像を把握するための適切な場所は次のとおりです。

  1. msdnからのクイックスタートチュートリアルhttp://msdn.microsoft.com/en-us/library/cc668796
  2. データをサービスとして公開する。http://msdn.microsoft.com/en-us/library/dd728286
于 2012-06-28T15:20:55.743 に答える
0

必要に応じて、すべてのストアドプロシージャと関数のカスタムAPI呼び出しにWebApi 2エンドポイントを使用し、次に他のすべての通常のテーブルにOData v3エンドポイントを使用して、API呼び出しを介して送信されるフィルタリングとクエリパラメーターについてあまり心配する必要がなくなりました。 。

于 2019-09-30T13:49:11.863 に答える