Asp.net mvc 如何更新相关表?
我的项目包括创建一个新的酒店房间,数据库中的两个表将更新。我的桌子叫做RoomType和RoomFacility 我可以成功地更新RoomType,但当我尝试更新RoomFacility并使用RoomTypeID创建新的RoomFacility时,失败了。我的房间设备总是1英镑 如何更新表、roomType和RoomFacility的数据 这是我的服务更新数据库的代码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,
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;
}