我的项目是c# Windows应用程序,我正在使用实体框架5和.net 4.5。
我有房间和床模块,您可以添加、编辑和删除房间和/或床
在我的表单中,我有一个用于RoomNo和Station的字段,也有添加和删除按钮来添加/删除数据库视图。
DB Structure
Rooms (table)
PK_Rooms
FK_Station
RoomNo
Beds (table)
PK_Beds
FK_Rooms
BedNo
FullRoomNo (concat only of Roomno and Bedno)
RoomStatus
下面是我为DB添加房间和床的方法
M3dEntities m3d = new M3dEntities();
rooms rooms = new rooms();
beds beds = new beds();
string RoomNo = RoomNoTxt.Text;
int StationID = Int32.Parse(StationCmb.SelectedValue.ToString());
var roomnoexist = from g in m3d.rooms
where g.RoomNo == RoomNo
select g;
if (roomnoexist.Any())
{
MessageBox.Show("Room No. Already Exist!");
}
else
{
rooms.RoomNo = RoomNo;
rooms.FK_Stations = StationID;
m3d.rooms.AddObject(rooms);
}
foreach (DataGridViewRow row in BedsDataGridView.Rows)
{
beds.Bedno = row.Cells[0].Value.ToString();
beds.FullRoomNo = row.Cells[1].Value.ToString();
beds.RoomStatus = "Available";
m3d.beds.AddObject(beds);
}
m3d.SaveChanges();
(例:增加1201房间,有4张床)只有最后一行的床被保存到DB。
我的问题:
发布于 2016-05-21 13:29:33
您应该将beds beds = new beds();
指令移动到foreach
语句中,如下所示:
foreach (DataGridViewRow row in BedsDataGridView.Rows)
{
beds beds = new beds(); // Here is its place.
beds.Bedno = row.Cells[0].Value.ToString();
beds.FullRoomNo = row.Cells[1].Value.ToString();
beds.RoomStatus = "Available";
m3d.beds.AddObject(beds);
}
说明您总是使用beds
的最后一个实例,该实例最终包含最后一行,并且只保存该行。
侧注:为了获得某些性能,如果您要插入多个对象一次,请使用AddRange
:
var bedsCollection = new List<beds>();
foreach (DataGridViewRow row in BedsDataGridView.Rows)
{
beds beds = new beds(); // Here is its place.
beds.Bedno = row.Cells[0].Value.ToString();
beds.FullRoomNo = row.Cells[1].Value.ToString();
beds.RoomStatus = "Available";
bedsCollection.Add(beds); // update the collection not the DbSet
}
m3d.beds.AddRange(bedsCollection);
m3d.SaveChanges();
https://stackoverflow.com/questions/37361840
复制相似问题