描述:linq 是自带事物的.如果建了两个linq to sql 类,各自访问不同的数据库,事物如何保证呢.
验证:采用常用的COM+事务来验证一下是否有效.
ServiceConfig config = new ServiceConfig(); config.Transaction = TransactionOption.Required; ServiceDomain.Enter(config); try { OA_TAB_LVBAL lvbal = dbHr.OA_TAB_LVBAL.SingleOrDefault(p => p.OA_LV_LEAVECODE == leaveCode && p.OA_LV_STAFFNO == staffNo && p.OA_LV_STARTDATE == balEndDate.AddYears(-1) && p.OA_LV_ENDDATE == balEndDate); if (lvbal == null) { lvbal = new OA_TAB_LVBAL(); lvbal.OA_LV_STAFFNO = staffNo; lvbal.OA_LV_ADJUSTMENT = 0; //需判断文职或非文职 lvbal.OA_LV_ASSIGNEDDAYS = 15; lvbal.OA_LV_ENDDATE = balEndDate; lvbal.OA_LV_LEAVECODE = "AL"; lvbal.OA_LV_REMARK = DateTime.Now.ToString() + "Insert"; lvbal.OA_LV_STARTDATE = balEndDate.AddYears(-1); dbHr.OA_TAB_LVBAL.InsertOnSubmit(lvbal); dbHr.SubmitChanges(); } OA_TAB_CONTRACT_TASKS task = new OA_TAB_CONTRACT_TASKS(); task.DOC_ID = "1001"; task.TASK_COMPLETEDATE = DateTime.Now; task.TASK_EXECUTOR = "200718"; task.TASK_ID = 1; task.TASK_NAME = "test"; task.TASK_STARTDATE = DateTime.Now; task.TASK_STATUS = 1; task.TASK_TYPE = "BZ"; dbOa.OA_TAB_CONTRACT_TASKS.InsertOnSubmit(task); dbOa.SubmitChanges(); ContextUtil.SetComplete(); } catch (Exception ex) { ContextUtil.SetAbort(); throw ex; } finally { ServiceDomain.Leave(); }
向HR的数据库中oa_tab_lvbal 及OA的OA_TAB_CONTRACT_tasks 分别insert 一条记录.
1:执行成功,表中多了一条数据
2: 删除oa_tab_lvbal中插入的数据
3:执行,task表中插入时会抛出异常. 期望结果:oa_tab_lvbal中的记录也插入不成功.
4:验证通过.