Entity Framework Core でテーブルにレコードを挿入する - C#

Entity Framework Core でテーブルにレコードを挿入するコードを紹介します。

概要

Entity Framework Core でテーブルにレコードを挿入する場合には、挿入するレコードのオブジェクトを作成し、 挿入したい値をオブジェクトに設定し、コンテキストオブジェクトのAddメソッドを呼び出します。

プログラム1: SQL Serverの例

事前準備

データベースとテーブルを作成します。詳細は以下の記事を参照してください。

UI

下図のフォームを作成します。

コード

下記のコードを記述します。
MyTable1Rec.cs
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; }
  }
}
MyDbContext.cs
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]ボタンを利用します。

コード

下記のコードを記述します。
MyContext.cs
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);
    }
  }
}
MyRec.cs
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
iPentec all rights reserverd.