我读了一个VehicleMovementEvent
物品的清单,其中大部分物品都是平坦的入口和出口区域。这些指标有进入或退出的指标,以及日期和时间。我使用这个列表产生一个VehiclePresence
对象的列表,告诉我一辆车从开始时间到结束时间存在于x区,从两个匹配的物体收集到。我只想整个清单被处理,或者没有任何要处理的东西,所以一个交易似乎是合适的。我是否正确使用此交易?
我不经常在代码中使用事务,所以我是这样做的吗?特别是w.r.t.隔离级别等
var opts = new TransactionOptions { IsolationLevel = IsolationLevel.RepeatableRead, Timeout = new TimeSpan(0, 0, 10, 0) };
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew, opts))
{
var vehicleMovements = startsbatch.Movements
.Where(m => m.MovementType.Direction == VehicleMovementEventType.Entry)
.OrderBy(m => m.EmpNo)
.ThenBy(m => m.MovementDateTime);
presenceBatch.StartDateTime = DateTime.Now;
presenceBatch.MovementBatch = startsbatch;
_dbContext.VehiclePresenceBatches.Add(presenceBatch);
_procTrace.TraceInformation("New VehiclePresencesBatch created. Id: {0}.", presenceBatch.Id);
foreach (var movement in vehicleMovements)
{
var presence = new VehiclePresence
{
PresenceBatch = presenceBatch,
EmpNo = movement.EmpNo,
Location = movement.Location,
StartDateTime = movement.MovementDateTime,
StartMovementBatchId = movement.BatchId,
StartMovementLineId = movement.LineId,
StartMovementId = movement.Id
};
_dbContext.VehiclePresences.Add(presence);
returnList.Add(presence);
}
_dbContext.SaveChanges();
scope.Complete();
_procTrace.TraceInformation("{0} VehicleMovements processed. {1} VehiclePresences created", vehicleMovements.Count(), returnList.Count);
}