我正在开发一个用于创建,更改和删除酒店预订(预订)的网络服务.一个预订可以包含多个住宿(住宿是房间,订购服务等之间的链接).每次入住都有自己的时间段,因此您可以在同一预订中创建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可以帮助这个,如果是这样,怎么样?
您应该能够通过使用事务获得预期的行为:
创建一个交易
删除您的预订
检查新房间是否可用并预订
如果一切正常,请提交
否则回滚交易
编辑 - 示例(使用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; }