在一个三层架构的应用程序中,中间层介于表示层和数据层之间,你所写的业务逻辑和数据验证都将在中间层出现。创建拥有良好用户体验的RIA应用,你需要客户端和服务端有着相同的业务规则,因此在客户端和服务端保证同步的中间层变得至关重要。WCF RIA Services可以让你在中间层用.NET框架编写逻辑应用,下面将讲述如何使用Domain Services以共享代码、数据实体来创建中间层。
DomainService类是所有服务端domain services类的基类,另外WCF RIA Services也提供了LinqToEntitiesDomainService和LinqToSqlDomainService两个继承自DomainService的抽象类。
如果不熟悉WCF RIA Services,可参见WCF RIA Services 简单应用。
数据操作方法
1.Query
返回值 |
IEnumerable<T>, IQueryable<T>, entity |
参数 | 任何数字(Any number) |
命名前缀 | 任何名字(Any name) |
属性(Attribute) | [Query] |
示例 | public IQueryable<Product> GetProducts() |
2.Update
返回值 |
无(None) |
参数 | 实体(Entity) |
命名前缀 | Update, Change, Modify |
属性(Attribute) | [Update] |
示例 | public void UpdateProduct() |
3.Insert
返回值 |
无(None) |
参数 | 实体(Entity) |
命名前缀 | Insert, Add, Create |
属性(Attribute) | [Insert] |
示例 | public void AddProduct(Product product) |
4.Delete
返回值 |
无(None) |
参数 | 实体(Entity) |
命名前缀 | Delete, Remove |
属性(Attribute) | [Delete] |
示例 | public void AddProduct(Product product) |
5.Custom
返回值 |
无(None) |
参数 | 实体(Entity)和任何数字参数,实体是必须的参数 |
命名前缀 | 任何除了以Update、Insert、Delete为前缀 |
属性(Attribute) | [Update(UsingCustomMethod=true)] |
示例 | [Update(UsingCustomMethod=true)] public void IncreaseUnitPrice(Product product, decimal price) |
6.Invoke、Resolve
Invoke | Resolve | |
返回值 | 不限 | 布尔 |
参数 | 不限 |
Current entity |
命名前缀 | 不限 | Resolve |
属性(Attribute) | [Invoke] | [Resolve] |
定义了公开的数据操作之后,你可以直接向Domain Services中添加所需的应用程序逻辑。Domain Services作为WCF服务,是建立在WCF概念之上的。
ProductDomainService.cs
一、使用Query方法
在MainPage.xaml中添加如下代码
在Button的Click事件名处右键->导航到事件|查看代码
Load方法的第2个参数是System.Action<LoadOperation<T>>委托。
上述操作是调用Domain Services的GetProductById方法实现查询数据,如果是调用GetProducts(自动生成)方法,详细参见WCF RIA Services 简单应用,不同之处如下:
另外一种绑定数据的方式:
二、使用Insert、Update、Delete等方法
有关Invoke、Resolve数据操作方法,本人尚未知有何用途,也就是不知如何使用。
仅演示Update和Delete方法。
三、总结
在添加DomainServices时候,选择可用的Context,而ADO.NET数据服务则默认是 空,需要手动添加。通过DomainServices获取Entities,完全支持Entities Query,操作起来十分方便。另外DomainServices也可用在ASP.NET客户端。
跟着微软跑,实在是累…
SL1.0,几乎全是js脚本,不支持.NET编码,一年多之后…
SL2.0,虽然支持了.NET编码,但不支持数据库操作,而后不到一年…
SL3.0,不错,有了.NET RIA Services,而且从beta到release不到半年,又增加了N多控件,也有了不少的教材(书),书还没捂热乎呢,SL4beta就出来了…… 有望得到企业应用(信息系统)吗,开发难度大(会编码的人不会做设计,我想N多程序员宁可用.NET代码控制一个动画,也不愿用Blend去完成)……