0

前もってお詫び申し上げます。これは長い質問です。

(TL;DR : WCF Data Services/OData を使用して公開された動的フィールドで EF を使用することに関するアドバイスはありますか)

WCF Data Services と EF について、特に一部のデータを OData サービスとして公開することに関連して、いくつかの概念上の問題があります。

基本的に私の問題はこれです。私が公開しているデータベースでは、ユーザーはフィールド (ユーザー定義フィールド) を動的に追加でき、これらのフィールドが基になる SQL テーブルに直接追加されるシステムを使用しています。さらに、直接 SQL を使用できないテーブルにデータを追加する場合は、それらが提供する API を経由する必要があります。(それは SAP Business One です、fwiw)。

私はすでに、XML 経由でさまざまなオブジェクトを公開し、クライアントが XML メッセージを送信して SBO に新しいエンティティを更新または追加できるようにするシステムの構築に成功しています。エントリ ポイントは古い学校の asmx Web サービスです。モバイル開発用にアレンジして、WCF または Web API で Odata を使用したいと考えています。(WCF サービスに変更し、JSON 形式の要求の処理を許可し、JSON データを返し始めることができることはわかっていますが、もっと...ネイティブな...方法が必要なようです)

最初は、a) 動的フィールドと b) EF は読み取り専用にしかできないため、これに EF を使用する可能性を割り引いていました。エンティティの追加/更新は傍受され、SBO DI サーバーにルーティングされる必要があります。しかし、私はそれについて考えに戻ってきており、アプローチ方法に関するアドバイス (否定的またはその他!) を探しています。

私が基本的にやりたいことはこれです

  • SBO からのベース テーブル (それら自身がパッチを発行する場合を除いて変更されない) を EF エンティティとして公開します。実際には、テーブルを直接公開するつもりはありません。特定のデータのみをサード パーティに公開できるようにするために行っている他のさまざまな機能と結びついているため、一連のフィルター処理された SQL ビューをデータ ソースとして使用します。

  • 特定のユーザーがエンティティごとに何らかの EAV サブコレクションとして追加した UDF を公開します。

  • オブジェクトを追加または更新するリクエストを傍受し、SAP データ インポート サービスとのインターフェース用に私が持っている既存のエンジンを介してこれらをルーティングします。

私の主な質問はこれだと思います。Header および Details コレクションで構成される Sales Order を表す EF エンティティを実装するとします。これらの各クラスには、ユーザー定義のフィールドと値の EAV 型コレクションを使用します。OData フィルタリング システムが EAV コレクションで直接動作できるようにするために必要な作業量 (たとえば、クライアントがService/Orders/$filter=SomeUdfField eq SomeValueを要求できるようにするために、この要求を EAV に渡す必要がある場合) Order ヘッダー エンティティのコレクション)

または、たとえば、ある種のメタデータからオンザフライで EF モデルを生成することは可能ですか (方法は気にしません - コード生成またはモデル構築ライブラリ)。適切なEFモデルとして?ここまで読んでくれてありがとう:)

4

1 に答える 1

2

既存の EF コンテキストに対する基本的な問題については、WCF Data Services がうまく機能します。上記で説明したように、カスタム機能を追加したい場合は、もう少し作業が必要です。

あなたが説明したことは可能ですが、メタデータの動的生成と追加/更新/削除へのカスタムフックを処理するには 、独自のカスタムデータプロバイダーを構築する必要があります。

WCF Data Services Toolkitを調べる価値があるかもしれません。これは、使いやすさのために WCF Data Services にリポジトリ パターンを平手打ちするカスタム プロバイダーですが、カスタム メタデータの生成は提供しません。

于 2013-01-16T00:41:20.723 に答える