Asp.net mvc 如何更新相关表?

Asp.net mvc 如何更新相关表?,asp.net-mvc,asp.net-mvc-3,entity-framework,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,Asp.net Mvc 4,我的项目包括创建一个新的酒店房间,数据库中的两个表将更新。我的桌子叫做RoomType和RoomFacility 我可以成功地更新RoomType,但当我尝试更新RoomFacility并使用RoomTypeID创建新的RoomFacility时,失败了。我的房间设备总是1英镑 如何更新表、roomType和RoomFacility的数据 这是我的服务更新数据库的代码 public void UpdateFacilityInRooms(List<int> FacilityIDs,

我的项目包括创建一个新的酒店房间,数据库中的两个表将更新。我的桌子叫做RoomType和RoomFacility

我可以成功地更新RoomType,但当我尝试更新RoomFacility并使用RoomTypeID创建新的RoomFacility时,失败了。我的房间设备总是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;
      }
public void UpdateFacilityInRooms(列出设施ID,int RoomTypeID)
{
列出酒店客房设施=
_酒店客房设施可回收。AsQueryable()
其中(f=>f.RoomTypeID==RoomTypeID).ToList();
foreach(设施中的int newRoomFacility)
{
if(hotelroomfacility.Where(h=>h.RoomFacilityID==newRoomFacility.Count()==0)
{
HotelRoomFacility=新的HotelRoomFacility
{
RoomFacilityID=新的RoomFacility,
RoomTypeID=RoomTypeID
};
_酒店客房设施。添加(设施);
}
}
_酒店房间设施可回收。提交更改();
}
公共房间类型新房(int HotelID,int?RoomTypeID,
字符串RoomTypeName、字符串RoomTypeDescription)
{
RoomType房间=新的RoomType();
room.HotelID=HotelID;
room.RoomTypeID=RoomTypeID±0;
room.RoomtypeName=RoomtypeName;
room.RoomTypeDescripton=RoomTypeDescription;
_RoomTypeRepository.Add(房间);
_RoomTypeRepository.CommitChanges();
返回室;
}
公共RoomType更新eRoom(int RoomTypeID、字符串RoomTypeName、字符串RoomTypeDescription、列表RoomFacilityId)
{
RoomType RoomType=(来自_RoomTypeRepository.AsQueryable()中的rt。包括(r=>r.HotelRoomFacilities)
其中rt.RoomTypeID==RoomTypeID
选择rt.FirstOrDefault();
if(roomType==null)
返回null;
roomType.RoomTypeName=RoomTypeName;
roomType.RoomTypeDescripton=RoomTypeDescription;
//添加新的房间设施
列出HotelRoomFacilityPropository.AsQueryable()。其中(f=>f.RoomTypeID==RoomTypeID).ToList();
foreach(在RoomFacilityId中输入newRoomFacilityID)
{
if(roomType.HotelRoomFacilities.Where(h=>h.RoomFacilityID==newRoomFacilityID.Count()==0)
{
roomType.HotelRoomFacility.Add(新建HotelRoomFacility)
{
RoomFacilityID=新建RoomFacilityID
});
}
}
foreach(HotelRoomFacility中的HotelRoomFacility)
{
if(RoomFacilityID.Contains(roomFacility.RoomFacilityID)==false)
_HotelRoomFacilityRopository.Delete(roomFacility);
}
_RoomTypeRepository.Attach(roomType);
_RoomTypeRepository.CommitChanges();
返回房间类型;
}

您正在使用实体框架,是吗?那么我认为这个问题将帮助您,或者这个问题可能会帮助您检查FacilityID。它包含不止一个元素吗?你能给我一些例子吗?这段代码非常混乱。首先,RoomFacility是酒店RoomFacility的主键吗?你能包括定义这个模型的代码吗?第二,由于此处未包含回购代码,因此该错误可能存在于回购代码本身,或者与之发生了不良交互。
 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;
        }