Entity Framework Core データの設定
前回、コードファーストを使ってテーブルを作成しましたが、作成したBookCategoryテーブルにデータを入れてみます。
次に画面を作って行きます。メイン画面は以下のようにしました。
左側の方は、Bookテーブル用。右の方はBook2テーブル用。ここの新規ボタンを押下すると以下のような画面が表示されるようになっています。
カテゴリーを表示するコードは以下のようにします。
public Book1Form(TestDBContext dbContext)
{
InitializeComponent();
_dbContext = dbContext;
var categoryList = _dbContext.BookCategorys.OrderBy(a => a.CategoryID).ToList();
foreach (var category in categoryList)
{
KeyValuePair kvp = new KeyValuePair(category.CategoryID, category.CategoryName);
this.comboBoxCategory.Items.Add(kvp);
}
}
以下のように入力して保存します。
保存するコードは以下のようにしました。
private void buttonSave_Click(object sender, EventArgs e)
{
int key = ((KeyValuePair)this.comboBoxCategory.SelectedItem).Key;
var category = _dbContext.BookCategorys.FirstOrDefault(a => a.CategoryID == key);
ModelBook modelBook = new ModelBook();
modelBook.BookName = textBoxName.Text;
modelBook.Category = category;
_dbContext.Books.Add(modelBook);
_dbContext.SaveChanges();
this.Close();
}
Book2テーブルはKeyのみを設定するようにします。
private void buttonSave_Click(object sender, EventArgs e)
{
int key = ((KeyValuePair)this.comboBoxCategory.SelectedItem).Key;
ModelBook2 modelBook = new ModelBook2();
modelBook.BookName = textBoxName.Text;
modelBook.CategoryID = key;
_dbContext.Book2s.Add(modelBook);
_dbContext.SaveChanges();
this.Close();
}
こんな感じでちょこっと入れてみました。
あと、こちらをUpdateする場合は、「_dbContext.Book2s.Add(modelBook);」のところを「_dbContext.Book2s.Update(modelBook);」と書くという説明になっているサイトもあるのですが、 _dbContextがどこが変更されているかを常に監視しているので、 「_dbContext.SaveChanges();」と書くのみでOKです。逆にUpdateと書くと処理速度が遅くなるみたいです。この追跡機能というやつがすごいポイントなので覚えていてくださいね。