自定义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的更多相关文章
- Custom Data Service Providers
Custom Data Service Providers Introduction Data Services sits above a Data Service Provider, which i ...
- Common Data Service (CDS) 初探
作者:陈希章 发表于 2017年12月16日 前言 Common Data Service(以下简称为CDS),通用数据服务是一个创新性的基础功能,这是微软试图打造一个全新的基于SaaS模式的数据服务 ...
- Hyperledger Fabric Membership Service Providers (MSP)——成员服务
Membership Service Providers (MSP) 本文将介绍有关MSPs的设置和最佳实践的详细方案. Membership Service Providers (MSP)是一个旨在 ...
- salesforce lightning零基础学习(六)Lightning Data Service(LDS)
本篇可参看:https://trailhead.salesforce.com/modules/lightning_data_service Lightning中针对object的detail页面,一个 ...
- POJ 3911:Internet Service Providers
Internet Service Providers Time Limit: 2MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I ...
- WCF Data Service
WCF Data Service:http://www.cnblogs.com/shanyou/category/240225.html
- 我的WCF Data Service 系列 (一、为什么要有WCF Data Service)
开篇先说两名题外话, 在博问上,经常看到有个问性能问题,比如Entity Framework的性能行不行啊之类的. 其实这个行不行,关键还是看对象,一夜家族的老七可能勉强吃点蓝片片,也就行了,可真要让 ...
- Laravel 之Service Providers
Service providers are the central place of all Laravel application bootstrapping. Your own applicati ...
- WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务
在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主要说明在.NET的环境下,如何使用 WCF Data Se ...
随机推荐
- SQL Server数据库视图
1:什么是视图 2:视图和查询的区别 3:视图的优点 4:如何创建和管理视图 5:如何通过视图修改基本表的数据 6:如何通过视图实现数据的安全性 A:什么是视图: 视图(view):从一个或几个基本表 ...
- cocos2dx 3.2 定义自己使用rapidjson阅读json数据
一.说明 我在这里得到的只是一个简单的定义string和Int种类,其他数据类型可以被替换向上. 两.头文件 class JsonReadUtils { public: static JsonRead ...
- Android Widget 小部件(一) 简单实现
在屏幕上加入Widget:或长按屏幕空白处,或找到WidgetPreview App选择. 原生系统4.0下面使用长按方式,4.0及以上 打开WIDGETS 创建Widget的一般步骤: 在menif ...
- BP神经网络的基本原理
2.1 BP神经网络基本原理 BP网络模型处理信息的基本原理是:输入信号Xi通过中间节点(隐层点)作用于输出节点.经过非线形变换,产生输出信号Yk,网络训练的每一个样本包含输入向量X和期望输出量t,网 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第7章节--打包并部署SP2013 Apps 打包并公布App
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第7章节--打包并部署SP2013 Apps 打包并公布App 如今既然你理解了一个app的四个主要部分, ...
- Java SE学习之数组——匿名数组和不规则数组
本文是学习网络上的文章时的总结以及自己的一点实践.感谢大家无私的分享. 近期偶然遇到了数组的问题,学习了匿名数组和不规则数组. 匿名数组适用于仅仅使用一次的情况:不规则数组适用是每行数据总数不确定的情 ...
- 我学的是设计模式的视频教程——命令模式vs策略模式,唠嗑
课程视频 命令模式vs策略模式 唠嗑 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博主原创文章,博客,未经同意不得转载.
- Uncaught TypeError: Cannot read property 'call' of undefined jquery.validate.min.js:28
最近在做表单验证时,,自己写的addMethod 方法总是不起作用.折腾了将近一天. 报告的错误,如下面的 Uncaught TypeError: Cannot read property 'call ...
- Windows Auzre 微软的云计算产品的后台操作界面
Windows Auzre 微软的云计算产品的后台操作界面,试用期,相比于阿里云后台操作不是人. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTmFvbG ...
- 【TCP/IP 合约】 TCP/IP 基金会
总结 : 通过学习 TCP/IP 基础, 并总结相关笔记 和 绘制思维导图 到博客上, 对 TCP/IP 框架有了大致了解, 之后開始详细学习数据链路层的各种细节协议, 并作出笔记; 博客地址 : h ...