我正在开发一项网络服务,用于创建,更改和删除酒店预订(预订)。一个预订可以包含多个住宿(住宿是房间之间的链接,订购的服务等)。每次入住都有自己的时间段,因此您可以在同一预订中创建3次住宿,为期3周。
当需要更改预订时,我的问题就出现了。输入是预订ID(如上所示)以及所需住宿的新数据。因此,如果原来的住宿是2个单人间和1个双人间,每个都有自己的开始和结束日期,并且客户希望将其中一个单人间改为双人间,他会发送:1个单人间,2个双人间,以及由我来决定改变了什么(这不会改变,所以我担心任何解决方案都会改变这种情况。)
我使用LINQ来挑选当前的停留并将其设置为删除
var oldStays = (from stay in persistentStorage.DataContext.Stays
where stays.booking_id == bookingId
select stay);
persistentStorage.DataContext.Stays.DeleteAllOnSubmit(oldStays);
然而,在我删除它们之前,我需要确保有新的住宿空间。如果LINQ在进行新查询时自动将这些记录假设为已删除(这意味着我不必担心日期,现有房间等),这将是一个简单的方法。如果是这种情况,问题就已经解决了。
如果没有,我需要某种方式来检查新的可用预订,同时忽略没有改变的住宿(在上述情况下,我只需要检查在给定时间段内是否有双人房,因为另一个双人和单人已经预订了)。有没有一些聪明的方法LINQ可以在这方面提供帮助,如果有,怎么做?
答案 0 :(得分:5)
您应该能够通过使用交易获得预期的行为:
编辑 - 示例(使用SQL事务,您也可以使用TransactionContext):
try
{
persistentStorage.DataContext.Transaction=persistentStorage.DataContext.Connection.BeginTransaction();
var oldStays = (from stay in persistentStorage.DataContext.Stays
where stays.booking_id == bookingId
select stay);
persistentStorage.DataContext.Stays.DeleteAllOnSubmit(oldStays);
persistentStorage.DataContext.SubmitChanges();
// do you select/insert/etc.
if (ok)
persistentStorage.DataContext.Transaction.Commit();
}
finally
{
if (persistentStorage.DataContext.Transaction!=null) persistentStorage.DataContext.Transaction.Dispose();
persistentStorage.DataContext.Transaction=null;
}