Tag: .nettiers

SQL事务如何工作?

我没有在SQL工作太久,但我认为我理解通过在事务中包装SQL语句,所有语句都已完成,或者没有完成。 这是我的问题。 我有一个具有lineitem集合的订单对象。 订单项与订单相关。订单号。 我已经validation所有的ID都已设置并且是正确的,但是当我尝试保存(插入)我得到的顺序时,INSERT语句与FOREIGN KEY约束“FK_OrderItemDetail_Order”冲突。 冲突发生在数据库“MyData”,表“dbo.Order”,列’OrderId’中。 伪代码: 创建一个事务transaction.Begin()插入命令Insert order.LineItems < – 这里发生错误transaction.Commit 实际代码: … entity.Validate(); if(entity.IsValid) { SetChangedProperties(实体); entity.Install.NagsInstallHours = entity.TotalNagsHours; foreach(在entity.OrderItemDetailCollection中的OrderItemDetail orderItemDetail) { SetChangedOrderItemDetailProperties(orderItemDetail); } ValidateRequiredProperties(实体); TransactionManager transactionManager = DataRepository.Provider.CreateTransaction(); EntityState originalEntityState = entity.EntityState; 尝试 { entity.OrderVehicle.OrderId = entity.OrderId; entity.Install.OrderId = entity.OrderId; transactionManager.BeginTransaction(); SaveInsuranceInformation(transactionManager,entity); DataRepository.OrderProvider.Save(transactionManager,entity); DataRepository.OrderItemDetailProvider.Save(transactionManager,entity.OrderItemDetailCollection); if(!entity.OrderVehicle.IsEmpty) { DataRepository.OrderVehicleProvider.Save(transactionManager,entity.OrderVehicle); } transactionManager.Commit(); } 抓住 […]