自定义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. 【原创】leetCodeOj --- Largest Number 解题报告

    原题地址: https://oj.leetcode.com/problems/largest-number/ 题目内容: Given a list of non negative integers, ...

  2. 在WPF中处理Windows消息

    在Winform中 处理Windows消息通过重写WndProc方法 在WPF中 使用的是System.Windows. Sytem.Windows.Controls等名字空间,没有WndProc函数 ...

  3. oracle 12c 三学习 pdb 可插拔测试

    DECLARE l_result BOOLEAN; BEGIN l_result := DBMS_PDB.check_plug_compatibility( pdb_descr_file => ...

  4. 【Linux探索之旅】第一部分测试题

    内容简介 1.第一部分测试题 2.第二部分第一课预告:终端Terminal,好戏上场 10道测试题 让我们选择开机时进哪个操作系统的软件叫什么? A. booter B. bootloader C. ...

  5. HDU--3081--Marriage Match II--最大匹配,匈牙利算法

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. 揭秘传智播客毕业班的超级薪水7k内幕系列II----Offer工资表5.7k,为什么不能让老师就业就业

    在上海传智播客宋学生Java六期学员.在班级尚未毕业阶段,私自投递简历,而且逃课去面试,获得某国企的Offer.入职薪资5.7K,,兼有五险一金.饭补等齐全福利,因就业老师要求班级同学未毕业不要急于就 ...

  7. Search Bars(一个)

    A search bar provides an interface for text-based searches with a text box and buttons such as searc ...

  8. 构建安全的Xml Web Service系列之SSL篇

    原文:构建安全的Xml Web Service系列之SSL篇 首先介绍一下SSL, SSL 的英文全称是 "Secure Sockets Layer" ,中文名为 "安全 ...

  9. EJB学习笔记

      1 J2ee概述 J2ee是企业级的计算平台,它为分布式和基于组件的软件开发提供了一个“操作系统” Ant是什么工具?? EJB: 什么是EJB? 是一种server端组件结构,简化了开发分布式企 ...

  10. 允许debian wheezy支持IOS7+的iphone.

    IOS更新, 连接到数据线,不能使用 我想复制iphone照片只能用于内itunes对?  于linux这里面其实很容易处理. 在这里,我们使用了一个相对较新的组件libimobiledevice 为 ...