【问题标题】:How to create POCO classes based on a WCF Data Service如何基于 WCF 数据服务创建 POCO 类
【发布时间】:2016-07-04 12:41:56
【问题描述】:

我有一个可消耗的 WCF 数据服务(假设我无法访问它的源代码)。

我需要具有代表数据服务提供的相同类的 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 类。

是否有一种基于数据服务生成这些类的好方法?

【问题讨论】:

    标签: c# wcf-data-services poco


    【解决方案1】:

    WCF 服务在概念上生成数据协定。因此,我认为您将获得所需的所有信息。如果您仍想生成类,请尝试使用 Reflection 和 CodeDom。 https://msdn.microsoft.com/en-gb/library/saf5ce06(v=vs.110).aspx

    【讨论】:

    • WCF 服务确实提供了数据协定。但是,数据服务(因为它是“普通”REST 服务)却没有。所以要么我根据元数据“净化”生成的代理类,要么生成我自己的类。
    【解决方案2】:

    由于我找不到任何合适的解决方案,我创建了一个库,该库基于 WCF 数据服务元数据创建必要的 POCO 类。

    它是开源的,你可以在这里获取它https://github.com/nestorium/DS2POCO

    我希望你会发现它有用:)

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 2013-06-28
      • 2012-02-28
      • 2016-05-01
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      相关资源
      最近更新 更多