2017-07-17 9 views
0

winformsアプリケーションでEFに関する情報はあまりありません。トンhis msdn pageでは、我々が見つかりました:DBFormext/EFをwinformアプリケーションで正しく使用するには?

フォームのWindows Presentation Foundationの(WPF)またはWindowsでの作業、フォームごとにコンテキスト・インスタンスを使用します。これにより、コンテキストで提供される 変更追跡機能を使用できます。

だから私は、は私が使用してはならないことを前提としています(

using (var context = new MyAppContext()) 
{  
    // Perform operations 
} 

が、私はフォームのロード時に新しいMyAppContextを作成して、フォームが閉じているときにそれを解放する必要がありますし、場合によってはSaveChange())。

正しいですか?

「はい」の場合は、アプリケーション全体のデータベースを実行時にどのように変更できますか?

+1

ここにも同様のスレッドがあります。https://stackoverflow.com/questions/20216147/entity-framework-change-connection-connection-at-runtime基本的にはいくつかの方法があります。毎回それを指定することができ、設定ファイルやその他の方法でグローバル変数を変更することができます。または、X個の環境に接続文字列を設定し、必要なものへのポインタ参照を持つ変数やその他の場所を持つことができます。最終的にはほとんどの場合、デプロイ時に誰かが自分の設定ファイルを変更するのを見るので、あなたの環境には静的です。 – djangojazz

答えて

1

私はあなたが含める必要があるすべてのモデルのためのフォームごとのコンテキストインスタンスが必要と思います。 WPFフォームの後ろに座っている講座のフォームのコードです(Entity Framework in Depth: The Complete Guide)。私はこれが助けて欲しい!

using PlutoDesktop.Core.Domain; 
using PlutoDesktop.Persistence; 
using System; 
using System.Data.Entity; 
using System.Windows; 

namespace PlutoDesktop 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     private PlutoContext _context = new PlutoContext(); 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      System.Windows.Data.CollectionViewSource courseViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("courseViewSource"))); 

      _context.Courses.Include(c => c.Author).Load(); 

      courseViewSource.Source = _context.Courses.Local; 
     } 

     protected override void OnClosing(System.ComponentModel.CancelEventArgs e) 
     { 
      base.OnClosing(e); 

      _context.Dispose(); 
     } 

     private void AddCourse_Click(object sender, RoutedEventArgs e) 
     { 
      _context.Courses.Add(new Course 
      { 
       AuthorId = 1, 
       Name = "New Course at " + DateTime.Now.ToShortDateString(), 
       Description = "Description", 
       FullPrice = 49, 
       Level = 1 

      }); 

      _context.SaveChanges(); 
     } 
    } 
} 
関連する問題