5

次のような単純な小さなデータモデルがあります。

InventoryContext {

IEnumerable<Computer> GetComputers()

IEnumerable<Printer> GetPrinters()

}

コンピューター {

public string ComputerName { get; set; }

public string Location { get; set; } }

プリンター {

public string PrinterName { get; set; }

public string Location { get; set; }

}

結果はSQL以外のソースから取得されるため、このデータはデータベースに接続されたEntityFrameworkから取得されません。

次に、WCFODataサービスを介してデータを公開します。これまでに私が見つけた唯一の方法は、このブログチュートリアルに従って、独自のデータサービスクエリプロバイダーを作成することです。

http://blogs.msdn.com/alexj/archive/2010/01/04/creating-a-data-service-provider-part-1-intro.aspx

...これは素晴らしいことですが、かなり複雑な作業のようです。プロバイダーのコードは、すべてのリソースセットとプロパティ定義を生成するために、データモデル全体の4倍長くなります。

Entity Frameworkとゼロから独自のデータソースを作成する間に、汎用プロバイダーのようなものはありますか?おそらく、オブジェクトデータソースなどを構築して、魔法のWCFユニコーンがプロバイダーを明示的にコーディングしなくても、私のデータを取得して日没に乗ることができるようにする方法はありますか?

4

3 に答える 3

2

いわゆる「リフレクション プロバイダー」を使用できます。これは、IQueryable (エンティティ タイプは T) を返すプロパティ (または多くのプロパティ) があることを前提としています。簡単な「方法」については、このビデオをご覧ください。 http://msdn.microsoft.com/en-us/data/cc745968.aspx

于 2010-06-11T10:09:45.490 に答える
1

組み込みのReflectionProviderを使用できます。

InventoryContextに以下を追加します。

IQueryable<Computer> Computers { get { return GetComputers().AsQueryable(); } }
IQueryable<Printer> Printers { get { return GetPrinters().AsQueryable(); } }

System.Data.Services.Clientそして、次のようにエンティティを変更します(プロジェクトへの参照を追加する必要があります)。

using System.Data.Services.Common;

[DataServiceKey("ComputerName")]
public class Computer 
{
    public string ComputerName { get; set; }
    public string Location { get; set; } }
}

[DataServiceKey("PrinterName")]
public class Printer
{
    public string PrinterName { get; set; }
    public string Location { get; set; } }
}

それが終わったら、次のように、データサービスをInventoryContextに向けるだけです。

public InventoryDataService : DataService<InventoryContext>
{
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
        config.UseVerboseErrors = true;         
    }
}

それはあなたがする必要があるすべてであるはずです。InventoryContextには、パラメーターのないコンストラクターが必要です。

于 2011-01-07T00:56:15.043 に答える
0

WCF Data Services ツールキットを使用できます。

これはもともと Microsoft のグループによって作成されたもので、Entity Framework に基づいていない OData サービスを非常に柔軟な方法で作成できます。

Jonathon Carter は、昨年の mix で、Mongo DB に OData サービスをラップする優れたデモを行いました。

http://channel9.msdn.com/events/MIX/MIX11/FRM16

コードは codeplex http://wcfdstoolkit.codeplex.com/でも入手できます。

お役に立てれば。

于 2012-02-03T02:13:56.267 に答える