質問
現在、フォームでDBの値を更新できるアプリを開発しています。
そこで質問ですが、下記のようにDbContextをメンバーにおいて、
共用することは、正しい書き方なのでしょうか。
それとも、各イベントやメソッドの中で、using ステートメント等を用いて、
その度に使い捨てたほうが良いのでしょうか。
接続を専有してそうで不安になり、質問させていただきました。
どうぞ宜しくお願いします。
###環境
◎.net Frame Work 4.61
◎C#
◎Entity framework 6.2
◎SQLite3
◎visual studio Community 2017
◎windows7 64bit
現在のソースコード(共用するパターン)
C#
1 2namespace Test 3{ 4 public partial class MainWindow : Window 5 { 6 EntityDbContext Context = new EntityDbContext(); 7 8 public MainWindow() 9 { 10 InitializeComponent(); 11 12 //全体にバインド 13 this.DataContext = Context.MT_Users.Where(x => x.UserID == 235).Single(); 14 } 15 16 /// <summary> 17 /// 更新ボタンクリック 18 /// </summary> 19 /// <param name="sender"></param> 20 /// <param name="e"></param> 21 private void ButtonUpdate_Click(object sender, RoutedEventArgs e) 22 { 23 //実行 24 Context.SaveChanges(); 25 } 26 27 /// <summary> 28 /// 削除ボタンクリック 29 /// </summary> 30 /// <param name="sender"></param> 31 /// <param name="e"></param> 32 private void ButtonDelete_Click(object sender, RoutedEventArgs e) 33 { 34 var deleteTarget = new MT_Users { UserID = 235 }; 35 Context.MT_Users.Attach(deleteTarget); 36 Context.MT_Users.Remove(deleteTarget); 37 38 //実行 39 Context.SaveChanges(); 40 } 41 } 42} 43
###仕掛中のコード(毎回接続するパターン)
C#
1namespace Test 2{ 3 public partial class MainWindow : Window 4 { 5 public MainWindow() 6 { 7 InitializeComponent(); 8 9 using (var context = new EntityDbContext()) 10 { 11 //バインド 12 this.DataContext = context.User.Where(x => x.UserID == 235).Single(); 13 } 14 } 15 16 /// <summary> 17 /// 更新ボタンクリック 18 /// </summary> 19 /// <param name="sender"></param> 20 /// <param name="e"></param> 21 private void ButtonUpdate_Click(object sender, RoutedEventArgs e) 22 { 23 //フォームで変更された値をSaveChanges()で更新したいのですが、 24 //どう書けば良いか、わかりません。 25 } 26 27 /// <summary> 28 /// 削除ボタンクリック 29 /// </summary> 30 /// <param name="sender"></param> 31 /// <param name="e"></param> 32 private void ButtonDelete_Click(object sender, RoutedEventArgs e) 33 { 34 using (var context = new EntityDbContext()) 35 { 36 var deleteTarget = new MT_Users { UserID = 235 }; 37 context.MT_Users.Attach(deleteTarget); 38 context.MT_Users.Remove(deleteTarget); 39 40 //実行 41 context.SaveChanges(); 42 } 43 } 44 } 45}

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/25 15:51
2019/02/26 00:22
2019/02/26 20:56
2019/02/26 21:12
2019/02/27 00:48 編集
2019/02/27 00:37
2019/02/27 02:25
2019/02/27 03:25
2019/02/27 04:03 編集
2019/02/27 05:10
2019/02/27 05:56
2019/02/27 06:09
2019/03/10 14:19