2016-05-21 28 views
0

我的项目是Windows应用程序c#,我使用实体框架5和.net 4.5。实体框架 - 如何将多个更改(添加,更新,删除)保存到数据库(主细节)

我房间和床铺模块,您可以添加,编辑和删除间(S)和/或床(S)

我的形式我有RoomNo和站场,还添加和删除按钮添加/删除床(县)datagridview的,然后保存按钮保存床的房间和列表到DB

DB Structure 

Rooms (table) 
PK_Rooms 
FK_Station 
RoomNo 

Beds (table) 
PK_Beds 
FK_Rooms 
BedNo 
FullRoomNo (concat only of Roomno and Bedno) 
RoomStatus 

我已经实施的“AddRoom”的方法,这将创造新的房间和床的列表。

我的问题是我如何实现“EditRoom”方法,它会检测床上的变化(添加一张新床,和/或编辑床号和/或删除床)并将其保存到数据库?

为了有更好的理解我的关心,请参见前面的线程,也有AddRoom法> Entity Framework only saving last row (master details)

编辑: 这里是我的代码EditRoom方法

 M3dEntities m3d = new M3dEntities(); 
     rooms rooms = new rooms(); 
     beds beds = new beds(); 
     string RoomNo = RoomNoTxt.Text; 
     int StationID = Int32.Parse(StationCmb.SelectedValue.ToString()); 
     int _SelectedPKRoom = Int32.Parse(SelectedPKRoom); 
     rooms = m3d.rooms.First(x => x.PK_Rooms == _SelectedPKRoom); 
     { 
      rooms.RoomNo = RoomNo; 
      rooms.FK_Stations = StationID; 
     } 


     foreach (DataGridViewRow row in BedsDataGridView.Rows) 
     { 
      beds = new beds(); 
      beds.Bedno = row.Cells[0].Value.ToString(); 
      beds.FullRoomNo = row.Cells[1].Value.ToString(); 
      beds.RoomStatus = "Available"; 
      m3d.beds.AddObject(beds); 
      m3d.beds.DeleteObject(beds); 
     } 

     m3d.SaveChanges(); 

的此代码的问题是只有空间正在更新:(

+0

您能告诉我们您开始使用的'EditRoom'方法吗? – CodeNotFound

+0

[使用WinForms实体框架数据绑定](https://msdn.microsoft.com/en-us/data/jj682076.aspx)本分步演练演示如何将实体绑定到WinForms控件的“主细节“表格 –

+0

@ RezaAghaei会尝试你的建议,如果我得到了它,我会更新你的答案:)谢谢 – Henry

回答

0

这是一种方式,我希望它可以帮助你

   var room= (from g in m3d.rooms 
         where g.RoomNo == RoomNo 
         select g).FirstOrDefault(); //Take an objecto room to modify 
    room.FK_Stations = StationID; 
    foreach (DataGridViewRow row in BedsDataGridView.Rows) 
    { 

     int Bedno = row.Cells[0].Value.ToString(); 

     var bedsChanged= (from g in m3d.beds 
         where g.bedno== Bedno 
         select g).FirstOrDefault(); 

     bedsChanged.FullRoomNo = row.Cells[1].Value.ToString(); 
     bedsChanged.RoomStatus = "Available"; 

    } 
    m3d.SaveChanges(); 
+0

感谢您的答案兄弟,但如问题所示,床可能有额外的行和/或删除现有的行,和/或更新行中的字段。 – Henry

相关问题