当前位置:  开发笔记 > 编程语言 > 正文

C#LINQ状态DeleteOnSubmit()

如何解决《C#LINQ状态DeleteOnSubmit()》经验,为你挑选了1个好方法。

我正在开发一个用于创建,更改和删除酒店预订(预订)的网络服务.一个预订可以包含多个住宿(住宿是房间,订购服务等之间的链接).每次入住都有自己的时间段,因此您可以在同一预订中创建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可以帮助这个,如果是这样,怎么样?



1> laktak..:

您应该能够通过使用事务获得预期的行为:

创建一个交易

删除您的预订

检查新房间是否可用并预订

如果一切正常,请提交

否则回滚交易

编辑 - 示例(使用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;
}

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有