前もってお詫び申し上げます。これは長い質問です。
(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モデルとして?ここまで読んでくれてありがとう:)