zoukankan      html  css  js  c++  java
  • Silverlight WCF RIA服务(十四)数据 4

    如何自定义解决数据并发性冲突 WCF RIA Services框架把原值和更改后的值一起传递给数据访问层。这就允许数据访问层在提交数据更改之前检测数据并发性冲突。数据访问层是通过检测数据源中的当前值是否与Domain操作中检索到的值一致来判断冲突的。 我们可以为一个特定的实
      
    如何自定义解决数据并发性冲突
    WCF RIA Services框架把原值和更改后的值一起传递给数据访问层。这就允许数据访问层在提交数据更改之前检测数据并发性冲突。数据访问层是通过检测数据源中的当前值是否与Domain操作中检索到的值一致来判断冲突的。
    我们可以为一个特定的实体自定义如何解决数据并发性冲突,这个方法在冲突确认时被调用。在这个方法中,可以指定步骤来解决冲突。这个方法必须匹配作为解决冲突的方法所需的签名。格式应如下:

    • 返回一个Boolean值。
    • 有个Resolve名字前缀或有ResolveAttribute。
    • 接受四个参数(current entity, original entity, store entity, 和一个指定是否本操作是个删除操作的值)

    自定义解决数据并发性冲突

    1. 在domain service中,添加一个匹配做为解决方法所需签名的方法。
    2. 在这个方法中添加解决冲突的代码。下面的代码示例了一个名为ResolveProduct的方法,这个方法在冲突发生时会从domain操作中合并数据。 这个自定义的冲突解决代码,通过使用ResolveOption枚举值来指定合并数据。
      1
      2
      3
      4
      5
      6
      public bool ResolveProduct(Product currentProduct, Product originalProduct, Product storeProduct, Boolean deleteOperation)
      {
          return base.Resolve(currentProduct, originalProduct, storeProduct, ResolveOption.MergeIntoCurrent);
      }

       

    如何向Domain service添加显式事务
    可以在Domain Service中添加显式事务,来执行一组变化。
    创建一个显式事务
    1. 在项目中,添加对System.Transactions程序集的引用。也可以从[program files]\Reference Assemblies\Microsoft\Framework\.NETFramework\[version]\System.Transactions.dll 找打。
    2. 在Domain Service中,重载Submit方法。
    3. 创建一个TransactionScope,它打包了对基类中Submit方法的调用。
    4. 在完成事务之前,检查ChangeSet对象的HasError成员属性。示例如下:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      [EnableClientAccess()]
      public class DomainService1 : DomainService
      {
          public override bool Submit(ChangeSet changeSet)
          {
              bool result = false;
       
              using (var tx = new TransactionScope(
                  TransactionScopeOption.Required,
                  new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })
                  )
              {
                  result = base.Submit(changeSet);
                  if (!this.ChangeSet.HasError)
                  {
                      tx.Complete();
                  }
              }
       
              return result;
          }
      }

       
    Powered By D&J (URL:http://www.cnblogs.com/Areas/)
  • 相关阅读:
    CodeForces 492C Vanya and Exams (贪心)
    CodeForces 492A Vanya and Cubes
    如何设置 Windows 默认命令行窗口大小和缓冲区大小
    [MySQL] Data too long for column 'title' at row 1
    [转] Hibernate不能自动建表解决办法(hibernate.hbm2ddl.auto) (tables doesn't exist)
    CodeForces 489D Unbearable Controversy of Being (不知咋分类 思维题吧)
    Autofac官方文档翻译--二、解析服务--1解析参数传递
    Autofac官方文档翻译--一、注册组件--4组件扫描
    Autofac官方文档翻译--一、注册组件--3属性和方法注入
    Autofac官方文档翻译--一、注册组件--2传递注册参数
  • 原文地址:https://www.cnblogs.com/Areas/p/2172171.html
Copyright © 2011-2022 走看看