Entity Framework Core でテーブルにレコードを挿入するコードを紹介します。
概要
Entity Framework Core でテーブルにレコードを挿入する場合には、挿入するレコードのオブジェクトを作成し、
挿入したい値をオブジェクトに設定し、コンテキストオブジェクトのAddメソッドを呼び出します。
プログラム1: SQL Serverの例
事前準備
データベースとテーブルを作成します。詳細は以下の記事を参照してください。
UI
下図のフォームを作成します。
コード
下記のコードを記述します。
using System;
namespace EntityFrameworkCoreOperateTableSqlServer
{
public class MyTable1Rec
{
public int id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public string Code { get; set; }
public int Price { get; set; }
}
}
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
namespace EntityFrameworkCoreOperateTableSqlServer
{
public class MyDbContext : DbContext
{
public DbSet<MyTable1Rec> MyTable1 { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlServer("Data Source=(DBホスト名またはIPアドレス);Initial Catalog=iPentecSandBox3;User ID=(ユーザーID);Password=(パスワード);Encrypt=False");
}
}
}
namespace EntityFrameworkCoreOperateTableSqlServer
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
MyDbContext cx = new MyDbContext();
MyTable1Rec mtr = new MyTable1Rec();
mtr.Name = "ぺんぎんクッキー";
mtr.Category = "焼き菓子";
mtr.Code = "PRD-A-001";
mtr.Price = 240;
cx.MyTable1.Add(mtr);
mtr = new MyTable1Rec();
mtr.Name = "らくだキャラメル";
mtr.Category = "生菓子";
mtr.Code = "PRD-C-016";
mtr.Price = 85;
cx.MyTable1.Add(mtr);
mtr = new MyTable1Rec();
mtr.Name = "しろくまアイス";
mtr.Category = "氷菓";
mtr.Code = "PRD-A-201";
mtr.Price = 320;
cx.MyTable1.Add(mtr);
cx.SaveChanges();
textBox1.Text += "レコードを挿入しました。\r\n";
}
private void button2_Click(object sender, EventArgs e)
{
MyDbContext cx = new MyDbContext();
IEnumerable<MyTable1Rec> result = cx.MyTable1;
foreach (MyTable1Rec r in result) {
textBox1.Text += string.Format("{0:d} - {1} / {2} / {3} - {5:g}\r\n",
r.id, r.Name.Trim(), r.Category.Trim(), r.Code.Trim(), r.Price);
}
}
}
}
解説
MyDbContext.cs, MyTable1Rec.cs ファイルはデータベースコンテキスト、テーブル構造のクラスです。
詳細は
こちらの記事を参照して下さい。
[Insert Record]ボタン(button1)をクリックするとテーブルにレコードを挿入します。
データベースコンテキストオブジェクトを作成します。
MyDbContext cx = new MyDbContext();
挿入するレコードのオブジェクトを作成し、値を代入します。
MyTable1Rec mtr = new MyTable1Rec();
mtr.Name = "ぺんぎんクッキー";
mtr.Category = "焼き菓子";
mtr.Code = "PRD-A-001";
mtr.Price = 240;
データベースコンテキストオブジェクトのDbSetオブジェクトのAddメソッドを呼び出してレコードを挿入します。
cx.MyTable1.Add(mtr);
補足
レコードの挿入は、データベースコンテキストオブジェクトのAddメソッドを呼び出す記述も可能です。
Addメソッドのパラメーターのオブジェクト型に応じたテーブルにレコードが挿入されます。
cx.Add(mtr);
データベースコンテキストオブジェクトのSaveChanges() メソッドを呼び出し、変更をデータベースに反映します。
cx.SaveChanges();
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[Insert Record]ボタンをクリックします。レコードを挿入した旨のメッセージが表示されます。
テーブルの内容を確認します。コードで記述したレコードが挿入されています。
プログラムでテーブルのレコードを一覧を取得してもレコードが追加されていることを確認できます。
プログラム2: SQLiteの例
事前準備
データベースとテーブルを作成します。詳細は以下の記事を参照してください。
UI
下図のフォームを作成します。
複数のボタンが配置されていますが、[Insert Record]ボタンと[Select All]ボタンを利用します。
コード
下記のコードを記述します。
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Sqlite;
namespace SimpleEntityFrameworkCoreSqlite
{
public class MyContext : DbContext
{
public DbSet<MyRec> Rec { get; set; }
public string DbPath { get; }
public MyContext()
{
DbPath = @"C:\storage\data\mydata.db";
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlite("Data Source=" + DbPath);
}
}
}
using System;
namespace SimpleEntityFrameworkCoreSqlite
{
public class MyRec
{
public int ID { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public int Price { get; set; }
}
}
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
namespace SimpleEntityFrameworkCoreSqlite
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
MyContext mc = new MyContext();
MyRec mr = new MyRec();
mr.Name = "ぺんぎんクッキー";
mr.Category = "焼き菓子";
mr.Price = 240;
mc.Add(mr);
mr = new MyRec();
mr.Name = "らくだキャラメル";
mr.Category = "生菓子";
mr.Price = 85;
mc.Add(mr);
mr = new MyRec();
mr.Name = "しろくまアイス";
mr.Category = "氷菓";
mr.Price = 320;
mc.Add(mr);
mc.SaveChanges();
textBox1.Text += "レコードを挿入しました。\r\n";
}
private void button3_Click(object sender, EventArgs e)
{
MyContext mc = new MyContext();
IEnumerable<MyRec> result = mc.Rec;
foreach (MyRec m in result) {
textBox1.Text += string.Format("{0:d} {1} {2} {3:d}\r\n", m.ID, m.Name, m.Category, m.Price);
}
}
}
}
解説
MyContext.cs, MyRec.cs ファイルはデータベースコンテキスト、テーブル構造のクラスです。
詳細は
こちらの記事を参照して下さい。
[Insert Record]ボタン(button2)をクリックするとテーブルにレコードを挿入します。
データベースコンテキストオブジェクトを作成します。
MyContext mc = new MyContext();
レコードのオブジェクトを作成し、挿入する値を代入します。
MyRec mr = new MyRec();
mr.Name = "ぺんぎんクッキー";
mr.Category = "焼き菓子";
mr.Price = 240;
データベースコンテキストオブジェクトのAddメソッドを呼び出し、レコードを挿入します。
mc.Add(mr);
データベースコンテキストオブジェクトのSaveChanges() メソッドを呼び出し、変更をデータベースに反映します。
mc.SaveChanges();
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[Insert Record]ボタン(button2)をクリックします。テキストボックスにレコードを挿入した旨のメッセージが表示されます。
テーブルのレコードすべてを表示します。挿入したレコードの値がテーブルに記録されていることが確認できます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2023-05-08
作成日: 2022-11-26