Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何基于WCF数据服务创建POCO类_C#_Wcf Data Services_Poco - Fatal编程技术网

C# 如何基于WCF数据服务创建POCO类

C# 如何基于WCF数据服务创建POCO类,c#,wcf-data-services,poco,C#,Wcf Data Services,Poco,我有一个可消费的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; }

我有一个可消费的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;
}
我只能访问服务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;
            }
        }
公共部分类MyEntities:global::System.Data.Services.Client.DataServiceContext
{
/// 
/// 
/// 
[System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Data.Services.Design”,“1.0.0”)]
公共MyEntities(全局::System.Uri serviceRoot):
基本(serviceRoot)
{
this.OnContextCreated();
}
部分无效OnContextCreated();
/// 
/// 
/// 
[System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Data.Services.Design”,“1.0.0”)]
公共全局::System.Data.Services.Client.DataServiceQuery信息
{
得到
{
如果((this.Info==null))
{
这个._Info=base.CreateQuery(“Info”);
}
返回此。\u信息;
}
}
或者是充满注释和方法的类:

[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;
    }
[global::System.Data.Services.Common.DataServiceKeyAttribute(“ID”)]
公共部分类信息
{
/// 
/// 
/// 
/// 
///         
[System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Data.Services.Design”,“1.0.0”)]
公共静态信息CreateInfo(整数id,字符串数据)
{
信息=新信息();
info.ID=ID;
信息数据=数据;
退货信息;
}
我只想要纯POCO类。


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

概念上,WCF服务生成一个数据协定。因此,我认为您将获得所需的所有信息。如果您仍然希望生成类,请尝试使用反射和CodeDom。

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

它是开源的,您可以在这里获取它


我希望您会发现它很有用:)

WCF服务确实提供了数据协定。但是,数据服务(因为它是“普通”REST服务)却没有。因此,我要么根据元数据“净化”生成的代理类,要么生成自己的类。
[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;
    }