如何自定义解决数据并发性冲突
WCF RIA Services框架把原值和更改后的值一起传递给数据访问层。这就允许数据访问层在提交数据更改之前检测数据并发性冲突。数据访问层是通过检测数据源中的当前值是否与Domain操作中检索到的值一致来判断冲突的。
我们可以为一个特定的实体自定义如何解决数据并发性冲突,这个方法在冲突确认时被调用。在这个方法中,可以指定步骤来解决冲突。这个方法必须匹配作为解决冲突的方法所需的签名。格式应如下:
- 返回一个 Boolean值。
- 有个Resolve名字前缀或有ResolveAttribute。
- 接受四个参数(current entity, original entity, store entity, 和一个指定是否本操作是个删除操作的值)
自定义解决数据并发性冲突
- 在domain service中,添加一个匹配做为解决方法所需签名的方法。
- 在这个方法中添加解决冲突的代码。下面的代码示例了一个名为ResolveProduct的方法,这个方法在冲突发生时会从domain操作中合并数据。 这个自定义的冲突解决代码,通过使用ResolveOption枚举值来指定合并数据。
代码
1 public bool ResolveProduct(Product currentProduct, Product originalProduct, Product storeProduct, Boolean deleteOperation)
2 {
3 return base.Resolve(currentProduct, originalProduct, storeProduct, ResolveOption.MergeIntoCurrent);
4 }
2 {
3 return base.Resolve(currentProduct, originalProduct, storeProduct, ResolveOption.MergeIntoCurrent);
4 }
如何向Domain service添加显式事务
可以在Domain Service中添加显式事务,来执行一组变化。
创建一个显式事务
- 在项目中,添加对System.Transactions程序集的引用。也可以从 [program files]\Reference Assemblies\Microsoft\Framework\.NETFramework\[version]\System.Transactions.dll 找打。
- 在Domain Service中,重载Submit方法。
- 创建一个TransactionScope,它打包了对基类中Submit方法的调用。
- 在完成事务之前,检查ChangeSet对象的HasError成员属性。示例如下:
代码
1 [EnableClientAccess()]
2 public class DomainService1 : DomainService
3 {
4 public override bool Submit(ChangeSet changeSet)
5 {
6 bool result = false;
7 using (var tx = new TransactionScope(
8 TransactionScopeOption.Required,
9 new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })
10 )
11 {
12 result = base.Submit(changeSet);
13 if (!this.ChangeSet.HasError)
14 {
15 tx.Complete();
16 }
17 }
18 return result;
19 }
20 }
2 public class DomainService1 : DomainService
3 {
4 public override bool Submit(ChangeSet changeSet)
5 {
6 bool result = false;
7 using (var tx = new TransactionScope(
8 TransactionScopeOption.Required,
9 new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })
10 )
11 {
12 result = base.Submit(changeSet);
13 if (!this.ChangeSet.HasError)
14 {
15 tx.Complete();
16 }
17 }
18 return result;
19 }
20 }
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blackant2/archive/2010/04/08/5461611.aspx