WCF Data Services 5.0已经在4月9日发布,支持OData V3版本的协议。之前版本的WCF Data Services是随.NET FX 4.0发布的,这次是单独提供了安装包下载。这个版本有几个特性很不错,具体参看文章 http://blogs.msdn.com/b/writingdata_services/archive/2012/04/09/my-favorite-things-in-odata-v3-and-wcf-data-services-5-0.aspx。
新特性主要用于支持开放式数据协议(OData)版本3中的增强部分。以下是部分有趣的特性:
- 词汇表(Vocabularies) —— 标注,主要为使用OData发布的数据提供更丰富的描述(例如,类型验证/范围/显示相关的元数据);
- 操作提供器(Action Providers) ——一种通过在数据中描述URI来注入行为的方法。用户可以通过向这些URI发送请求用于引发一些操作,该特性同样工作于Entity Framework;
- 16项新的空间原语(Spatial Primitives)——它允许客户端在过滤、投影和排序子句中对地理空间数据执行操作;
- ODataLib现在支持对所有的OData负载进行序列化和反序列化;
- EdmLib—— 构建服务的EDM以用于OData序列化/反序列化,其中包括支持标注;
- 支持Any/All查询(目前还不支持联接Join)。
EF 4.3对Code First的支持也很不错,如何在EF 4.3的Code First结合WCF Data Service,可以参考http://msdn.microsoft.com/zh-cn/library/hh527719。这篇文章的代码经过简单的修正就可以跑了。
namespace CustomerDataServices
{
public class CustomerDataService : DataService<CustomerOrderContext>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead | EntitySetRights.WriteMerge);
//config.SetEntitySetAccessRule("EdmMetadatas", EntitySetRights.None);
config.UseVerboseErrors = true;
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
}
}