自定义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. memcache 集群

    memcache 是一个分布式的缓存系统,但是本身没有提供集群功能,在大型应用的情况下容易成为瓶颈.但是客户端这个时候可以自由扩展,分两阶段实现.第一阶段:key 要先根据一定的算法映射到一台memc ...

  2. Linux下安装Oracle11g服务器(转)

    安装环境 Linux服务器:SuSe10 sp2 64位 Oracle服务器:Oracle11gR2 64位 系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1G的物理内存 ...

  3. Vim配置说明

    使用这些天一直vim,我认为vim这是一个非常强大的编辑器,尤其是后配置. 互联网参考大牛个月vim配置,然后更改加入了一部分,形成了自己的配置.让Vim变的更强大. 详细有下面几个特点: 1.自己主 ...

  4. 怎样设制 select 不可编辑 仅仅读

    1. <select style="width:195px" name="role"  id="role" onfocus=" ...

  5. 基本介绍LINUX远程PC软件:PUTTY、SecureCRT、X-Manager

    ***********************************************声明************************************************ 原创 ...

  6. Hosting WCF Service

    之前在博客几个实例DemoWCF服务寄宿到控制到应用程序中,这篇来总结一下,经常使用的几种宿主的方式. 1.Self-Hosting 一个WCF服务可以寄宿在控制台应用程序或者WinForms app ...

  7. 【C语言探索之旅】 第一部分第八课:第一个C语言小游戏

    ​ 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写 ...

  8. poj2112 Optimal Milking --- 最大流量,二分法

    nx一个挤奶器,ny奶牛,每个挤奶罐为最m奶牛使用. 现在给nx+ny在矩阵之间的距离.要求使所有奶牛挤奶到挤奶正在旅程,最小的个体奶牛步行距离的最大值. 始感觉这个类似二分图匹配,不同之处在于挤奶器 ...

  9. POJ 2418 Hardwood Species(STL在map应用)

    职务地址:id=2418">POJ 2418 通过这个题查了大量资料..知道了非常多曾经不知道的东西. . .. 在代码中凝视说明吧. 代码例如以下: #include <ios ...

  10. Asp.net中Postback及Callback

    我们知道,在默认的情况下,当我们点击Asp.net Page中的一个服务器Button时(默认其实是Submit Form),会导致Page被Recreated,这个过程我们称之为Postback,它 ...