【问题标题】:How can I update related tables?如何更新相关表?
【发布时间】:2013-07-11 09:45:32
【问题描述】:

我的项目涉及创建一个新的酒店房间,我的数据库中的 2 个表将更新。我的表称为 RoomType 和 RoomFacility。

我可以成功更新 RoomType,但是当我尝试更新 RoomFacility 并使用 RoomTypeID 创建新的房间设施时,它失败了。我的 RoomFacilityID 总是得到 1。

如何更新两个表、roomType 和 RoomFacility 的数据?

这是我的服务更新我的数据库的代码

 public void UpdateFacilityInRooms(List<int> FacilityIDs, int RoomTypeID)
    {
        List<HotelRoomFacility> hotelRoomFacilities =
                            _HotelRoomFacilityRopository.AsQueryable()
                            .Where(f => f.RoomTypeID == RoomTypeID).ToList();

        foreach (int newRoomFacility in FacilityIDs)
        {
            if (hotelRoomFacilities.Where(h => h.RoomFacilityID == newRoomFacility).Count() == 0)
            {
                HotelRoomFacility facility = new HotelRoomFacility
                {
                    RoomFacilityID = newRoomFacility,
                    RoomTypeID = RoomTypeID
                };
                _HotelRoomFacilityRopository.Add(facility);
            }
        }
        _HotelRoomFacilityRopository.CommitChanges();
    }




 public RoomType NewRoom(int HotelID,int? RoomTypeID, 
                        string RoomTypeName, string RoomTypeDescription)
    {
        RoomType room = new RoomType();
        room.HotelID = HotelID;
        room.RoomTypeID = RoomTypeID ?? 0;
        room.RoomtypeName = RoomTypeName;
        room.RoomTypeDescripton = RoomTypeDescription;

        _RoomTypeRepository.Add(room);

        _RoomTypeRepository.CommitChanges();

        return room;
      }

【问题讨论】:

  • 您使用的是实体框架,是吗?
  • 那我觉得这个问题会帮助你stackoverflow.com/q/7609721/1411687或者这个stackoverflow.com/q/13973836/1411687
  • 检查 FacilityID。它是否包含多个元素?
  • 你能给我举个例子吗?
  • 这段代码很混乱。首先,RoomFacilityID 是 HotelRoomFacility 上的 PK 吗?你能包括定义这个模型的代码吗?其次,由于您的 repo 代码不包含在此处,因此错误可能在 repo 代码本身中,或者与它的不利交互。

标签: asp.net-mvc asp.net-mvc-3 entity-framework asp.net-mvc-4


【解决方案1】:
 public RoomType UpdateRoom(int RoomTypeID, string RoomTypeName, string RoomTypeDescription, List<int> RoomFacilityIDs)
        {

            RoomType roomType = (from rt in _RoomTypeRepository.AsQueryable().Include(r => r.HotelRoomFacilities)
                                 where rt.RoomTypeID == RoomTypeID
                                select rt).FirstOrDefault();

            if (roomType == null)
                return null;

            roomType.RoomTypeName = RoomTypeName;
            roomType.RoomTypeDescripton = RoomTypeDescription;

            //Add New Room facilities
            List<HotelRoomFacility> hotelRoomFacilities = _HotelRoomFacilityRopository.AsQueryable().Where(f => f.RoomTypeID == RoomTypeID).ToList();
            foreach (int newRoomFacilityID in RoomFacilityIDs)
            {
                if (roomType.HotelRoomFacilities.Where(h => h.RoomFacilityID == newRoomFacilityID).Count() == 0)
                {
                    roomType.HotelRoomFacilities.Add(new HotelRoomFacility
                    {
                        RoomFacilityID = newRoomFacilityID
                    });
                }
            }


            foreach (HotelRoomFacility roomFacility in hotelRoomFacilities)
            {
                if (RoomFacilityIDs.Contains(roomFacility.RoomFacilityID) == false)
                    _HotelRoomFacilityRopository.Delete(roomFacility);
            }

            _RoomTypeRepository.Attach(roomType);
            _RoomTypeRepository.CommitChanges();

            return roomType;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    相关资源
    最近更新 更多