实体框架 - 如何将多个更改(添加,更新,删除)保存到DB(主要详细信息)

时间:2016-05-21 15:13:40

标签: c# winforms entity-framework datagridview

我的项目是Windows应用程序c#,我使用的是Entity Framework 5和.net 4.5。

我有房间和床模块,您可以添加,编辑和删除房间和/或床

在我的表格上我有一个RoomNo和Station的字段,还有添加和删除按钮来添加/删除床到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”方法,它将检测床上的变化(添加一张新床,和/或编辑床号,和/或删除床)并将其保存到DB?

为了更好地理解我的问题,请参阅上一个主题,其中也包含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();

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

1 个答案:

答案 0 :(得分: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();