在此代码中,我试图检查用户输入的时间可用的房间。要测试房间是否空闲,我将房间名称更改为所有选项并进行碰撞检查。问题是,当我更改房间名称时,它还会在我的现有书籍列表中更新它。有没有办法确保现有的书籍不会改变?
var existingBookings = _context.Bookings.ToList();
var booking = await _context.Bookings.SingleOrDefaultAsync(m => m.BookingID == id);
List<Room> roomlist = new List<Room>();
roomlist = (from product in _context.Room
select product).ToList();
List<Room> availableRooms = new List<Room>();
foreach (var item in roomlist)
{
booking.RoomName = item.RoomName;
if (BusinessLogic.BookingChecker.DoesBookingClash(booking, existingBookings) == null)
{
availableRooms.Insert(0, new Room { RoomID = item.RoomID, RoomName = item.RoomName });
}
booking.RoomName = "UNDEF";
}
感谢您的帮助!
答案 0 :(得分:4)
为此,您必须创建Booking
的新实例。您可以调用构造函数并复制必要的属性,或实现ICloneable.Clone
方法。
public class Booking : ICloneable
{
public Booking Clone()
{
return new Booking() { RoomID = this.RoomID, etc. };
}
object ICloneable.Clone()
{
return this.Clone();
}
}
然后你称之为:
booking = booking.Clone();
// use the new booking instance.
答案 1 :(得分:0)
我修复此问题的方法是在Booking.cs
文件中添加一个名为proposed的新bool字段。创建建议的预订时,它会自动将其设置为true。在我的DoesRoomBookingClash
中,我添加了一个if语句,如果建议为真,则忽略数据库条目。完成所有更改后,建议设置为false。