微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight WCF RIA服务十四数据 4

如何自定义解决数据并发性冲突
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;
        }
    }
@H_509_404@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐