自定义Data Service Providers

自定义Data Service Providers

作者:AlexJ

翻译:谈少民

原文链接:http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx

简介

Data Services 建立于 Data Service Provider(数据服务提供者)之上,他负责Data Service与数据源之间的通讯。

Data Services内置了一些提供者,而且也允许你自定义数据提供者。

那么显而易见的问题是:

为什么要自定义数据提供者?

创建一个自定义的数据提供者十分有意义,你将获得巨大的收益,你可以:

l         在以下客户端程序中,查询和操作你的数据

n         WPF

n         WinForms

n         SilverLight

n         等等

l         在浏览器中直接查询和操控你的数据;

l         使用JavaScript或Jquery这样的框架程序查询和操控你的程序;

l         利用诸如PowerPivot这样的数据分析工具查询你的数据;

l         等等……

但是在你准备自定义Data Service Provider之前,建议你先阅读以下内容,因为我们已经提供了一些内置的方案。

Entity Framework(实体框架)

如果你计划使用Entity Framework构建数据访问层,在此基础上搭建你的Data Service,那么你无须自定义Data Service Provider。

Data Services已经内置了对Entity Framework 的数据提供者。

现在你可以非常简单的使用强类型的ObjectContext对象构建Data Service,就像这样:

public class NorthwindDataService:

DataService<NorthwindEntities>

在上面的例子代码中,NorthwindEntities是你使用Entity Framework生成的强类型ObjectContext类。

LINQ to SQL

如果你的Data Services使用LINQ to SQL作为数据访问层,那么你可以参考这个项目:

ADO.NET Data Services IUpdateable implementation for Linq to Sql

这个项目提供了例子代码,指导您实现一个强类型的DataContext类,此类实现了Iupdatable接口。这样你就能够使用Entity Framework相同的方式构建LINQ to SQL的数据提供者了。

public class NorthwindDataService:

DataService<NorthwindDataContext>

Reflection Provider(反射提供者)

如果你使用自定义类来提供数据源,且这些类包含一些返回类型是Iqueryable接口的属性,就像这样:

public class MyDataSource

{

    public IQueryable<Product> Products { get {…} }

    public IQueryable<Categories> Categories { get {…} }

}

那么内建的反射提供者能够自动提供只读的数据服务,推断ResourceSets、类型和属性。

当然,你也可以通过实现IUpdatable接口来支持写入功能。

public class MyDataSource: IUpdatable

此特性就是基于上面在LINQ to SQL中提到的功能。

什么时候必须自定义数据提供者呢?

在通常的场景下,反射提供者是一个比较好的选择,但是,他也有一些限制:

1、 他必须是静态的,你的服务是固定的;

2、 必须有一个事实存在的CLR类来描述资源类型,很可能你没有这个类;

3、 你必须有一个Id属性或者有个{Type}Id 这样名称的属性作为你的键;

4、 你需要将CLR类中所有有关的属性都要公开出来;

5、 在流和分页控制上,你没有太多的定制能力;

6、 你无法获得一些高级功能,例如Open Types特性,此特性允许你Open Properties上有更多的选择。

7、 一些细节你也很难定制,例如你不能够方便的记录请求,或者修改元数据以及重命名属性;

8、 等等……

如果这些问题是你所在乎的,那么你就必须自定义Data Service Provider了……

创建自定义数据提供者系列教程

在这个系列教程中,我们将展现大量的DSP(Data Service Provider)接口实现以及应用场景。

1、 概述

2、 IServiceProvider和DataSources 服务提供者和数据源;

3、 IDataServiceMetadataProvider元数据提供者

4、 最小化的运行时服务;

5、 查询;

6、 交互式查询;

7、 数据更新;

8、 关系

9、 动态类型

未来将包含更多的教程

10、              ETags

11、              订阅支持;

12、              数据流

13、              高级分页功能

时间: 2024-12-22 18:34:14

自定义Data Service Providers的相关文章

Custom Data Service Providers

Custom Data Service Providers Introduction Data Services sits above a Data Service Provider, which is responsible for interacting with the underlying Data Source on behalf of the Data Service. Data Services ships with some internal providers, and mak

salesforce lightning零基础学习(六)Lightning Data Service(LDS)

本篇可参看:https://trailhead.salesforce.com/modules/lightning_data_service Lightning中针对object的detail页面,一个lightning app可能包含了多个components,多个components不可避免的会对这个数据进行CRUD操作,如果我们针对每个component都在init操作时后台SQL进行查询,然后赋值给前台变量,进行CUD操作时,还要考虑其他component的数据是否要级联的改变,这种操作以

MS MDS系列之初识MS Master Data Service(微软主数据服务)

背景介绍: 主数据服务(Master Data Services)是微软平台支持的主数据管理(MDM)平台.类似MDS这样的系统,如果后续维护得当,会给企业提供一个强大的中心数据库系统,来防止企业数据变得不同步或不一致:同时也是企业内部管理数据流的可靠方式. 目前一个企业很多时候通过良性循环或者收购来实现业务增长.无论哪种方式,都将增加企业应用程序的数据流的数量和复杂度.如果断开和分离这些系统,将带来的各种问题,如数据不一致.数据数据碎片.数据不准确等等,并且对IT部门来讲,也会面对越来越多的困

WCF Data Service ----理论准备

WCF数据服务(WCF Data Service )是.NET Framework的一个组件. 可以使用此组件创建一些服务,利用开放式数据协议(OData)来借助具象状态传输(REST)语义通过Web或Intranet公开和使用数据. OData(Open Data Protocol)开放数据协议 OData将数据公开为可通过URI寻址的资源,可使用GET.PUT.POST和DELETE这些标准HTTP谓词来访问和更改数据. OData使用Entity Data Model的实体关系约定,将资源

ADO.NET Data Service

关于ADO.NET Entity Framework部分的内容见ADO.NET Entity Framework(1-4) http://www.cnblogs.com/foundation/archive/2008/10/06/1304718.html 本文例子下载: http://files.cnblogs.com/wxwinter/lz.rar 目录 1    ADO.NET Data Service介绍    2 2    创建DataService项目    3 2.1    数据表 

自定义data table 的列类型,并填充数据

combobox 的 datasource 一般是查询存储过程得到 , 但在测试或演示时,也可以自己定义 , 方法是 : DataTable customerTable = new DataTable(); customerTable.Columns.Add("clsCustomerID", typeof(string)); //定义列类型 customerTable.Columns.Add("clsCustomerNM", typeof(string)); Dat

Silverlight 2 (beta1)数据操作(3)——使用ADO.NET Data Service (Astoria)进行数据CRUD操作

目录 导言 软件需求 在SQL 2005中创建数据库 在Visual Studio 2008中创建Silverlight工程和ADO.NET Data Service 创建一个XMLHttpRequestWrapper类 在Silverlight中使用Astoria进行CRUD操作 导言 Silverlight 2支持JSON.Web Service.WCF以及Sockets等新特性对数据CRUD操作,这个系列用实例结合数据库一步一步的图文描述来学习一下Silverlight 2 beta 1中

调用WCF Data Service的几点Tips

使用Linq实现sql in statement的时候,用EF的时候可以通过Contains.Exists的方法实现.但是在使用WCF Data Service的context的时候,会报不支持该方法的错误.解决方案就是加上AsEnumerable(). var products = from p in ctx.V_Product.AsEnumerable() where catalogs.Exists(c => c.CatalogID == p.CatalogID) select p 主从表级

开发客户端Data Service

服务提供了元数据查询 --myservice.svc/$metadata .net客户端:通过使用代理生成工具生成代理类 --datasvcutil /uri:<uri> /out:<directory/filename> AJAX客户端:通过javascript脚本库进行访问 --Data Service AJAX Liabrary --可以从Codeplex上下载