2016-07-04 3 views
1

Ich habe einen konsumierbaren WCF-Datenservice (angenommen, ich kann nicht auf seinen Quellcode zugreifen).Erstellen von POCO-Klassen basierend auf einem WCF-Datenservice

Ich brauche POCO-Klassen, die die gleichen Klassen darstellen, die vom Datendienst bereitgestellt werden.

Hier ist ein Beispiel.

Service:

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; 
} 

Auftraggeber:

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

    public string Data {get; set} 

} 

Alles, was ich zugreifen kann, ist der Dienst-URI.

Offensichtlich Ich könnte das integrierte Proxy-Generator-Tool (datasvcutil.exe) verwenden, aber es erzeugt eine Menge Code, den ich nicht benötige.

Wie der Kontext:

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; 
      } 
     } 

Oder die Klassen, die voll von Anmerkungen und Methoden sind:

[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; 
    } 

Alles, was ich will, ist die reine POCO-Klassen.

Gibt es einen guten Ansatz, diese Klassen basierend auf dem Datendienst zu generieren?

Antwort

0

Da ich nicht jede geeignete Lösung finden konnte, habe ich eine Bibliothek, die die notwendigen POCO-Klassen auf der Grundlage der WCF Data Service-Metadaten erstellt.

Es Open Source ist, können Sie es hier erhalten: https://github.com/nestorium/DS2POCO

Ich hoffe, dass es nützlich sein :) Service

1

Konzeptionell ein WCF-Dienst generiert einen Datenvertrag. So denke ich, dass Sie alle Informationen haben werden, die Sie brauchen. Wenn Sie weiterhin Klassen erstellen möchten, verwenden Sie Reflection und CodeDom. https://msdn.microsoft.com/en-gb/library/saf5ce06(v=vs.110).aspx

+0

A WCF finden einen Datenvertrag vorsieht. Ein Datendienst (wie es ein einfacher REST-Dienst ist) jedoch nicht. Entweder "reinige" ich die generierten Proxy-Klassen basierend auf den Metadaten, oder ich generiere meine eigenen Klassen. – Nestor

Verwandte Themen