2016-05-21 4 views
0

私のプロジェクトはWindowsアプリケーションです。#、私はEntity Framework 5と.net 4.5を使用しています。Entity Framework - DBに複数の変更(追加、更新、削除)を保存する方法(マスター詳細)

は、私はあなたが私のフォーム上のルーム(複数)および/またはベッド(複数可)

を追加、編集、削除することができます部屋やベッドモジュールを持っている私はRoomNoと駅のためのフィールドを持って、また追加と削除ボタンをDataGridViewのためにベッド(複数可)を追加/削除するために、私はすでに新しいルームとベッドのリストを作成します「AddRoom」メソッドを実装し

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へのベッドの部屋とリストを保存するためにボタンを保存します。

私の質問はどのようにベッド上の変更を検出する(新しいベッドを追加し、そして/またはベッド番号を編集し、そして/またはベッドを削除した)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(); 

に私のコードですこのコードの問題は部屋だけで更新されています:(

+0

あなたは私たちにあなたがしてください始めている 'EditRoom'方法を示すことはできますか? – CodeNotFound

+0

[WinFormsを使用したEntity Frameworkデータバインディング](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

関連する問題