You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6停车位可用控制系统异常问题求助

停车位可用状态控制解决方案

核心问题分析

你当前的模型设计存在逻辑偏差:把表示停车位可用状态的Status字段放在了Booking(预订记录)实体中,这会导致每次新增预订时修改的是预订记录的状态,而非对应停车位的状态,根本无法实现对停车位可用性的控制。

1. 修正实体模型设计

需要拆分出独立的停车位实体和预订实体,让状态属性归属到停车位:

停车位实体(ParkingSlot)

public class ParkingSlot
{
    public int Id { get; set; }
    public bool Status { get; set; } = true; // true=可用,false=已占用
    public string SlotNumber { get; set; } // 停车位编号(示例属性)
    // 关联该车位的所有预订记录
    public ICollection<Booking> Bookings { get; set; } = new List<Booking>();
}

预订实体(Booking)

public class Booking
{
    public int Id { get; set; }
    public int ParkingSlotId { get; set; } // 关联的停车位ID
    public ParkingSlot ParkingSlot { get; set; }
    public int PickHours { get; set; } // 预订时长
    // 可添加其他预订属性:用户ID、预订时间等
}

2. 修正控制逻辑

现在基于停车位的状态判断是否可预订,并修改对应车位的状态:

// 从前端获取要预订的停车位ID(假设obj包含ParkingSlotId和PickHours)
var targetSlot = _db.ParkingSlots.FirstOrDefault(s => s.Id == obj.ParkingSlotId);

if (targetSlot != null && targetSlot.Status)
{
    // 创建新的预订记录
    var newBooking = new Booking
    {
        ParkingSlotId = obj.ParkingSlotId,
        PickHours = obj.PickHours
        // 填充其他预订信息:如用户ID、创建时间等
    };
    _db.Bookings.Add(newBooking);
    
    // 修改目标停车位状态为不可用
    targetSlot.Status = false;
    _db.SaveChanges();

    TempData["success"] = "Booking created successfully";
}
else
{
    TempData["error"] = targetSlot == null 
        ? "指定停车位不存在" 
        : $"该车位已被预订,无法预订{obj.PickHours}小时";
    return RedirectToAction("Index");
}

return View(obj);

3. 若坚持原模型的临时修复(不推荐)

如果暂时不想调整模型,仅解决Status修改不生效的问题,可尝试显式标记属性修改:

if (obj.Status == true)
{
    _db.Bookings.Add(obj);
    obj.Status = false;
    // 强制EF跟踪该属性的修改
    _db.Entry(obj).Property(x => x.Status).IsModified = true;
    _db.SaveChanges();

    TempData["success"] = "Booking created successfully";
}
else
{
    TempData["error"] = "This slot is already booked for " + obj.PickHours + " hours";
    return RedirectToAction("Index");
}

return View(obj);

内容的提问来源于stack exchange,提问作者Barış Aydoğdu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:35:29