我正在开发一个用于创建、更改和删除酒店预订(预订)的web服务。一次预订可以包含多个住宿(一个住宿是房间之间的链接,所订购的服务等)。每个住宿都有它自己的时间段,所以你可以在同一个预订中创建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有没有一些聪明的方式可以帮助这一点,如果是的话,如何?
发布于 2009-03-27 14:39:59
您应该能够通过使用事务来获得预期的行为:
check are the >创建一个transaction
EDIT - Sample (使用SQL transaction,您还可以使用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;
}https://stackoverflow.com/questions/689948
复制相似问题