C# 如何基于WCF数据服务创建POCO类
我有一个可消费的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; }
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;
}