当我们在RIA客户端提供更新、删除、创建新数据等接口时,经常需要在提交更改之前确定用户输入的数据是有效的并且对数据源来说是最新的。WCF RIA Services提供了几个特性,来允许我们检查数据的有效性以及确定数据与客户端代码的并发性。还提供像使用单一数据实体那样与复杂的数据关系交互的特性。
数据批注
当使用数据类时,可以通过对类或方法应用属性,来指定验证规则、如何显示数据、以及设定实体类之间的关系。System.ComponentModel.DataAnnotations命名空间包含用做数据属性的类。通过对数据类或成员应用这些属性,您可以集中处理数据定义,而不必在多个位置重新应用相同的规则。。
当与自动生成的数据类一起工作时,例如一个实体数据模型或LINQ to SQL 类,不必对生成的类直接应用属性。应为这些属性在下次类重新生成时会丢失。相反,应对数据类创建一个元数据类并把属性应用在元数据类上。一个元数据类是一个部分类(Partial class),在数据类中做为元数据类型来指定的。
数据批注属性分为三种类型:验证,显示,数据模型。
表示层模型
可以为表示层建立一些类型,这些类型没有直接与数据源表的结构连在一起。例如,我们可以建立一个命名为CustomerPeresentation的数据类型,这个数据类型是以数据类Customer、CustomerAddress、Address表为基础的。在表示层中,只出现与表示层有关的值。如果是在数据存贮器中做的改变,那只能改变表示层中的类型,并不能更改客户端与数据交互的代码。RIA Services允许我们通过表示层类型来更新数据。
复合层
RIA Services支持与具有层式结构的数据模型交互。这个层式结构能反映出父亲与孩子那样的复杂关系,例如订单与订单详情。或者递归的关系,例如一个职工模型,其中包含一个叫做ManagerID的字段,这个字段指向职工模型中的其他实体。
继承
当使用VS2010和silverlight 4时,RIA Services支持多态继承模式。例如:你可以创建一个数据结构,它包含一个Customer实体和两个从它派生的实体:PublicSectorCustomer和PrivateSectorCustomer。使用Domain operations,可以查询和更新这些类型。
数据并发机制
当我们允许用户更新或删除数据时,会想在操作前确认这个数据没有被其他用户修改过。如果不检查这个数据是否被修改过,那会在无意中覆盖了其他人修改的数据,使数据处于矛盾的状态。
RIA Services会存储原数据与修改过的数据,然后把他们都传递给数据访问层。数据访问层竟会比较原数据与数据源中现有的数据。如果相同,就表示数据没有被改动过,那么数据层就更新或删除数据。如果数据已经改动过,那么就会把这个冲突存放在已经不再有当前数据实体的Conflict()属性内。我们也可以在发生数据冲突时,调用自定义的解决冲突的方法。
如果我们对实体内的某个成员应用了[Exclude]属性,这个实体是可以在客户端更新和删除的,不要使用这个成员来进行并发检测。当排除了这个成员,就不会对这个成员存贮正确的原数据,并且更新操作将会失败。
事务
RIA Services框架不会自动创建事务。但可以在提交改变时添加明确的事务。可以通过重载Submit方法来创建自己的事务。
当我们在RIA客户端提供更新、删除、创建新数据等接口时,经常需要在提交更改之前确定用户输入的数据是有效的并且对数据源来说是最新的。WCF RIA Services提供了几个特性,来允许我们检查数据的有效性以及确定数据与客户端代码的并发性。还提供像使用单一数据实体那样与复杂的数据关系交互的特性。 数据批注 当使用数据类时