Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
当前位置: 主页 > Silverlight >

使用LINQ和ADO.NET创建Silverlight程序

时间:2010-08-14 08:27来源:未知 作者:admin 点击:

在Silverlight中可以创建行业和其它以数据为中心的应用系统,但在Silverlight中处理数据不是一件容易的事情,由于Silverlight包括许多处理数据和支持Web Service及XML的工具,但这些工具仅代表跨过防火墙进行数据访问的最基础的部分。

常见的数据访问策略是使用Web Service和客户端LINQ共同实现的,如果你正在修改现有Web Service端点强化你的Silverlight应用程序,那么我推荐你使用这个方法。但如果你在使用Silverlight创建一个新的Web Service,就没有必要这么做了。

对一个典型的Web Service层而言,你在服务器上实现一个传统的数据访问策略(自定义业务对象、LINQ to SQL、实体框架、Nhibernate等)通过Web Service暴露数据对象,Web Service仅仅是数据访问策略下面的网关。

但为了开启完整的数据连通性,你必须要映射四个数据操作(创建、读取、更新和删除)到Web Service方法,下面是一个简单的支持Product类的service contract,注意我在本文中使用的都是C#。

例1 Product Web Service的Service Contract

[ServiceContract]

public interface ICustomerService

{

  [OperationContract]

  List GetAllProducts();

  [OperationContract]

  Product GetProduct(int productID);

  [OperationContract]

  List GetAllProductsWithCategories();

  [OperationContract]

  Product SaveProduct(Product productToSave);

  [OperationContract]

  void DeleteProduct(Product productToDelete);

}
 

创建一套服务来处理应用程序完整的数据模型可能是相当费时的,正如这个例子中显示的,特殊特性的操作可能导致Web Service非常臃肿,换句话说,Web Service将有新的要求和操作要增加,甚至包括不属于核心业务域的操作。

在例1中你看到GetAllProductsWithCategories操作默认用于检索Product和分类。即使添加排序、过滤和分页机制到这个简单的例子你也不要感到惊讶,如果有一个简单的方法支持数据操作(如查询、排序、过滤等)不用每次都手动构建这些机制那将是非常吸引人的,ADO.NET Data Service就正是为此而生的。

ADO.NET Data Service

ADO.NET Data Service的目标是为数据模型提供Web访问端点,这些端点提供了数据排序、过滤、调整和分页功能,因此开发人员就不需要在自己去编写这部分代码了,实际上,每个端点都是LINQ查询的起点,就从这个端点上你就可以查询你想要查找的数据。

但不要认为ADO.NET Data Service是另一个数据访问策略,实际上,ADO.NET Data Service不执行任何直接的数据访问操作,它位于数据访问的上层,图1显示了ADO.NET Data Service和它在一个应用程序架构中的位置。

图 1 ADO.NET Data Service层

由于ADO.NET Data Service依赖于数据访问程序完成真实的数据访问工作,你必须指定这个方法该如何做,在ADO.NET Data Service中,每个服务(Service)必须回到开启LINQ的提供程序的后面,实际上,每个端点就是一个Iqueryable端点,因此ADO.NET Data Service支持任何支持Iqueryable的对象。

创建服务(Service)

当你将ADO.NET Data Service添加到你的项目中时,会创建一个新的.svc文件,代表一个服务的类,和Web Service不同,你不需要自己亲自实现服务的操作,但要允许DataService类处理这些工作,为了运行这些服务,有两个小任务必须执行。首先,DataService类需要一个类型参数叫做上下文对象,它是将数据作为服务暴露的类,当你的服务从关系数据库暴露数据时,这个类是从实体框架(EntityFramework)的ObjectContext或LINQ to SQL的DataContext衍生而来的。

//使用我的NorthwindEntities上下文对象(context object)作为服务(Service)的数据源

public class Products : DataService

上下文对象没有基数类要求,实际上,你可以创建你自己的上下文对象,只要它的属性实现了Iqueryable接口,ADO.NET Data Service将会以端点形式暴露这些属性:

public class StateContext

{

  StateList _states = new StateList();

  public IQueryable States

  {

    get { return _states.AsQueryable(); }

  }

}
 

InitializeService调用中,你可以使用IdataServiceConfiguration对象指定什么类型的许可允许进入服务,ADO.NET Data Service使用名词和动词具体指定许可,如例2所示:

 

例2 设置访问规则

//这个方法只被调用一次初始化服务端策略

public static void InitializeService(IDataServiceConfiguration config)

{

  //只允许我们读取和更新Products实体,不允许删除和创建

  config.SetEntitySetAccessRule("Products",

                                EntitySetRights.AllRead |

                                EntitySetRights.WriteUpdate);

  //只允许读取Category和Suppliers实体

  config.SetEntitySetAccessRule("Categories", EntitySetRights.AllRead);

  config.SetEntitySetAccessRule("Suppliers", EntitySetRights.AllRead);

}
 

完成这个之后,你可以直接浏览服务了,它将会显示每个端点的原子反馈信息,为了调试ADO.NET Data Service,我建议你禁用Internet Explorer的RSS 反馈视图,或使用另一个浏览器查看服务的XML格式。

(责任编辑:admin)

Tags:ADO.NET Silverlight LINQ
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价