自定义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. Shell 遍历字符串与参数

    遍历字符串: for line in  $Table_List do         echo $Table_List         echo $Table_List >> ${SYB_ ...

  2. Java正则表达式例子汇总

    1.过滤特殊字符 package com.sheepmu.text; /* * @author sheepmu */ public class HWCompetition { public stati ...

  3. MongoDB学习笔记-认识MongoDB

    学习参考地址 http://www.runoob.com/mongodb NoSql 流行的数据库Oracle,SqlServer,MySql为关系性数据库,相对的,也有非关系性数据库,统称为NoSq ...

  4. Vc6.0打开该文件坠毁

    这是一个微软bug,下面是用户给出的溶液: http://blog.163.com/wjatnx@yeah/blog/static/12758622820138110530322/ http://bl ...

  5. V离MWare至Openstack至FDIO

    离VMWare至Openstack 至FDIO  --软件虚拟化和硬件虚拟化相结合 作者:廖恒 以VMWare为代表的软件虚拟化技术在企业IT中已是耳熟能详的不争现实.据在HPISS任职的好友告知,V ...

  6. SQLSERVER存储过程语法的具体解释

    SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }   ...

  7. Java重写round()方法

    题目:完毕这种方法的代码实现 public static String round (String arg1, int arg2) 參数 arg1:表示等待被处理的数据:如:"100.286 ...

  8. 每天的学习经验:SharePoint 2013 定义自己添加的产品清单。Callout菜单项、文档关注、SharePoint服务机端对象模型查询

    前言: 前一段时间一直都比較忙.没有什么时间进行总结,刚好节前项目上线.同一时候趁着放假能够好好的对之前遇到的一些问题进行总结. 主要内容有使用SharePoint服务端对象模型进行查询.为Share ...

  9. StackExchange.Redis 使用 (一)

    在StackExchange.Redis中最重要的对象是ConnectionMultiplexer类, 它存在于StackExchange.Redis命名空间中.这个类隐藏了Redis服务的操作细节, ...

  10. T-SQL技巧收集——拆分字符串

    原文:T-SQL技巧收集--拆分字符串 在开发中,很多时候都需要处理拆分字符串的操作.下面收集了几种方法供大家分享,其中的逗号可以改为多种有需要的符号,但是不能针对多种符号同时存在的例子.有待各位补充 ...