自定义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、              高级分页功能

自定义Data Service Providers的更多相关文章

  1. Custom Data Service Providers

    Custom Data Service Providers Introduction Data Services sits above a Data Service Provider, which i ...

  2. Common Data Service (CDS) 初探

    作者:陈希章 发表于 2017年12月16日 前言 Common Data Service(以下简称为CDS),通用数据服务是一个创新性的基础功能,这是微软试图打造一个全新的基于SaaS模式的数据服务 ...

  3. Hyperledger Fabric Membership Service Providers (MSP)——成员服务

    Membership Service Providers (MSP) 本文将介绍有关MSPs的设置和最佳实践的详细方案. Membership Service Providers (MSP)是一个旨在 ...

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

    本篇可参看:https://trailhead.salesforce.com/modules/lightning_data_service Lightning中针对object的detail页面,一个 ...

  5. POJ 3911:Internet Service Providers

    Internet Service Providers Time Limit: 2MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I ...

  6. WCF Data Service

    WCF Data Service:http://www.cnblogs.com/shanyou/category/240225.html

  7. 我的WCF Data Service 系列 (一、为什么要有WCF Data Service)

    开篇先说两名题外话, 在博问上,经常看到有个问性能问题,比如Entity Framework的性能行不行啊之类的. 其实这个行不行,关键还是看对象,一夜家族的老七可能勉强吃点蓝片片,也就行了,可真要让 ...

  8. Laravel 之Service Providers

    Service providers are the central place of all Laravel application bootstrapping. Your own applicati ...

  9. WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务

    在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主要说明在.NET的环境下,如何使用 WCF Data Se ...

随机推荐

  1. OTG驱动分析(二)

    上回介绍了OTG功能的 OTG部分驱动,本片分析OTG功能的从设备部分驱动.从设备的注冊过程和OTG的一样,首先注冊设备. 流程是: 1.定义platform_device结构. 2.定义platfo ...

  2. iframe页面控制父页面跳转

    <script> window.onload=function(){   window.location.href="http://www.baidu.com";    ...

  3. 用Jstack跟踪Cpu占用率的Java线程(转)

    以下方法在centOS下执行通过:1.先定位占用cpu高的进程 top 2.使用以下命令 ps p 14766 -L -o pcpu,pid,tid,time,tname,stat,psr | sor ...

  4. Vbox创建COM对象失败

    近期在使用vbox时出现下面错误:创建COM对象失败,应用程序将被中断 在CMD里面输入下面命令: C:\Users\Administrator>d: D:\>cd D:\Program ...

  5. JS弄ASP.NET(C#)在页GridView信息选择行

    做web发展还是新手我,为了之前获得Gridview中间值,它是通过服务器端控件通过第一Gridview将数据保存到服务器,当一个服务器,然后绑定的隐藏字段,在通过的js阅读隐藏字段值,如今,这种方法 ...

  6. 非常棒的Visual Studo调试插件:OzCode 2.0 下载地址

    最新版下载地址 http://download.csdn.net/detail/simadi/8925511 如果你是一名C#开发者,那么,你则需要OzCode.它将可视化调试的概念上升到了一个新的高 ...

  7. 创建内向交货单 BBP_INB_DELIVERY_CREATE

    DATA:DEL_HEADER TYPE BBP_INBD_L. DATA:DEL_TAB TYPE TABLE OF BBP_INBD_D WITH HEADER LINE. DATA:DEL_RE ...

  8. 我学cocos2d-x (两) 采用Delegate(信托)

    Delegate(信托)什么 Delegate是ios开发中的一个概念,主要是为了让类A中的功能,放到类B中来实现,这样能够合理的把功能划分到不同的文件里进行实现,从而更好的实现模块的分离.如UIAp ...

  9. 90社交网络的行为报告后:不拒绝陌生人,TFBOYS作为一个喜爱

    依据腾讯QQ与易观合作的<2014中国90后青年调查报告>,盘点了90后使用社交网络的行为习惯. 相比于70.80后.90后更愿意在社交媒体上公布自己照片.状态,且更愿意在即时通讯中加陌生 ...

  10. HDU 4359 Easy Tree DP? 带权二叉树的构造方法 dp

    题意: 给定n deep 1.构造一个n个节点的带权树,且最大深度为deep,每一个节点最多仅仅能有2个儿子 2.每一个节点的值为2^0, 2^1 ··· 2^(n-1)  随意两个节点值不能同样 3 ...