かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

UWPでEntity Framework 追加・更新・削除

コードファーストでのテーブル定義もなんとなくわかったので、追加・更新・削除でもしてみたいと思います。

基本的な流れは、変更操作をした後SaveChangesメソッドを呼び出すという流れになります。SaveChangesを呼び出すとEntity Frameworkが、それまでの変更を元にDBに対して更新作業をしてくれます。こんなDbContextを定義してる前庭で話を進めていきます。

using Microsoft.Data.Entity;

namespace App51
{
    public class SampleContext : DbContext
    {
        public DbSet<Person> People { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite("filename=sample.db");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Person>()
                .ToTable("People")
                .Property(x => x.Name)
                .IsRequired();
        }
    }

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

追加

DbSetにAddしてSaveChangesです。

using (var ctx = new SampleContext())
{
    var p = new Person { Name = "Tanaka" };
    var p2 = new Person { Name = "Kimura" };

    ctx.People.Add(p);
    ctx.People.Add(p2);

    ctx.SaveChanges();

    Debug.WriteLine($"{p.Id} {p.Name}");
    Debug.WriteLine($"{p2.Id} {p2.Name}");
}

SaveChanges後には、Idに値がふられていること(DBで自動割り当てにしてるから)が確認できます。

更新

更新は、DbContextから取得したデータに対して変更をしてSaveChangesをします。

using (var ctx = new SampleContext())
{
    var p = ctx.People.First();
    p.Name = "Ohta";

    ctx.SaveChanges();
}

削除

データの削除は、DbSetから取得したエンテティに対してDbSetのRemove(たくさんある場合はRemoveRangeを使うと楽)メソッドに渡してSaveChangesすることで削除されます。

using (var ctx = new SampleContext())
{
    var p = ctx.People.First();
    ctx.People.Remove(p);
    ctx.SaveChanges();
}