2016-07-04 14 views
1

私は消耗品のWCFデータサービスを持っています(私はそのソースコードにアクセスできないと仮定します)。WCFデータサービスに基づいてPOCOクラスを作成する方法

がデータサービスによって提供される同じクラスを表すPOCOクラスを持つ必要があります。

ここは例です。

サービス:

public class Info 
{ 
    public int ID {get; set} 

    public string Data {get; set} 

} 

public IQueryable<Info> GetInfo() 
{ 
    return from info in context.Info 
     select info; 
} 

クライアント:

//should be generated 
public class Info 
{ 
    public int ID {get; set} 

    public string Data {get; set} 

} 

私がアクセスできるすべてのサービスURIです。

明らかに私はビルトインプロキシジェネレータツール(datasvcutil.exe)を使うことができますが、それは私が必要としない多くのコードを生成します。

public partial class MyEntities : global::System.Data.Services.Client.DataServiceContext 
    { 
     /// <summary> 
     /// 
     /// </summary> 
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")] 
     public MyEntities(global::System.Uri serviceRoot) : 
       base(serviceRoot) 
     { 
      this.OnContextCreated(); 
     } 
     partial void OnContextCreated(); 
     /// <summary> 
     /// 
     /// </summary> 
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")] 
     public global::System.Data.Services.Client.DataServiceQuery<Info> Info 
     { 
      get 
      { 
       if ((this.Info == null)) 
       { 
        this._Info = base.CreateQuery<Info>("Info"); 
       } 
       return this._Info; 
      } 
     } 

や注釈や方法に満ちているクラス:コンテキストのよう

[global::System.Data.Services.Common.DataServiceKeyAttribute("ID")] 
public partial class Info 
{ 
    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="ID"></param> 
    /// <param name="Data"></param>   
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")] 
    public static Info CreateInfo(int id, string data) 
    { 
     Info info = new Info(); 
     info.ID = id; 
     info.Data = data;    
     return info; 
    } 

私が欲しいのは、純粋なPOCOクラスです。

データサービスに基づいてこれらのクラスを生成する良い方法はありますか?

答えて

0

私はに任意の適切な解決策を見つけることができなかったとして、私は、WCFデータサービスのメタデータに基づいて、必要なPOCOクラスを作成し、ライブラリを作成しました。

は、それがオープンソースであり、あなたはここにをそれを得ることができます。https://github.com/nestorium/DS2POCO

私はあなたが役に立つことを見つけることを願っています:)

1

概念的には、WCFサービスはデータ契約を生成します。だから私はあなたが必要なすべての情報を持っていると思います。クラスを生成したい場合は、ReflectionとCodeDomを使用してみてください。 https://msdn.microsoft.com/en-gb/library/saf5ce06(v=vs.110).aspx

+0

WCFサービスは、データコントラクトを提供します。ただし、データサービス(通常のRESTサービス)はそうではありません。だから私は、メタデータに基づいて生成されたプロキシクラスを "浄化"するか、自分のクラスを生成します。 – Nestor

関連する問題