博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[AX]AX2012开发新特性-UnitOfWork
阅读量:7055 次
发布时间:2019-06-28

本文共 1452 字,大约阅读时间需要 4 分钟。

类UnitOfWork用来管理数据库事务,它成功处理所有保存在表变量的纪录,或者拒绝所有的更新,这个类还可以自动管理外键关联表的删除、插入和更新顺序,自动将主表主键值填入相应的外键列。UnitOfWork不能象delete_from那样处理where选择的批纪录,只能操作给定的行。典型的用法:

server static public void tryUnitOfWork(){    Table1 table1;    Table2 table2;    UnitofWork  uow=new UnitofWork();    ;    delete_from table1;    delete_from table2;    table1.ID="xx1";    table1.ValidFrom=today();    table1.ValidTo=today()+10;    table2.Field1="table2field1";    table2.masterTable1(table1);    uow.insertonSaveChanges(table1);    uow.insertonSaveChanges(table2);    uow.saveChanges();}

首先这个UnitOfWork必须是在服务器上运行,所以这里方法被定义为static并加上server关键字,因此这个方法不能使用Job,这里是一个类的静态方法。

表table2的Table1Fk字段用于容纳table1的recid,这是在table2的relations新建一个foreign key的关系时自动创建的,注意表table2的masterTable1方法,这也是设置foreign key的关系时自动创建的,方法名来自于relation的属性RelatedTableRole,同时必须把relation的CreateNavigationPropertyMethods设置为Yes。

UnitOfWork要求使用乐观(optimistic)并发控制,如果任何表变量使用了pessimistic并发控制,saveChanges会抛出错误。所有表都有一个OccEnabled属性,默认为yes,表示启用Optimistic并发控制,可以使用concurrencyModel 方法使用oncurrencyModel::Optimistic临时设置为乐观并发控制。新插入的纪录在select时也要使用optimisticLock 关键字,以防纪录死锁。

UnitOfWork内部使用数据库事务来处理数据更新,如果任何一个更改被拒绝,所有的更新被回滚保持数据以前的状态,同时表变量也被回滚,如果表变量使用insertonSaveChanges更新表变量会被重新初始化为null,如果用的updateOnSaveChanges表变量保持以前的值。

使用UnitOfWork的一个原则是尽量保持事务小规模,比如多次调用saveChanges提交更改,而不是在很多很多的insertonSaveChanges之后才saveChanges,因为大事务需要锁定更多的资源,容易造成死锁,当然也不是说每次insertonSaveChanges之后就调用saveChanges,这又会影响到性能的。

另外UnitOfWork也是首纪录级权限RLS控制的,UnitOfWork不能用于操作临时表。

更多信息查阅

转载地址:http://rvool.baihongyu.com/

你可能感兴趣的文章
中国人工智能学会通讯——一种基于众包的交互式数据修复方法 2 前期工作和问题陈述...
查看>>
几个面试经典算法题Java解答
查看>>
英方股份挂牌“新三板” :布局产业生态 深拓多种业务
查看>>
IBM大力发展慕尼黑Watson物联网总部,已经拥有了6000家客户
查看>>
公有云厂商自建威胁情报系统
查看>>
phpcms 2008 sp4的模板原理,tag的解析原理
查看>>
物联网安全:物联网从开源能够学到什么?
查看>>
《机器人自动化:建模、仿真与控制》——1.3 伺服电动机
查看>>
Gartner:企业重新思考软件安全战略
查看>>
热点推荐:2016年热门技术方向预测
查看>>
混合云平台为何更适合现代应用开发
查看>>
Linux交换空间(swap space)的那些优缺点
查看>>
我们该用什么姿态拥抱互联网+时代
查看>>
补天白帽大会五大热点前瞻
查看>>
PHP 性能分析与实验:性能的微观分析
查看>>
你需要了解自动化运维的设计思想
查看>>
说说Python中的闭包 - Closure
查看>>
大数据融入百姓生活 或将结束高考“一锤定音”
查看>>
理解RxJava线程模型
查看>>
企业IT运维效率低——如何破?
查看>>