SlideShare a Scribd company logo
1 of 43
Entity Framework Coreを使ってみる
Core 1.1.0/SQLite編
2017/3/10 1Copyright (c) 2017 Eiwa System Management, Inc.
株式会社永和システムマネジメント
コンサルティングセンター
センター長 天野勝
http://www.esm.co.jp/service/consulting/
 作成アプリケーション
 KPTボード
 動作確認環境
 対象:Entity Framework Core 1.1.0
 OS:Windows10 64bit
 IDE:Visual Studio 2015 Community
 RDBMS:SQLite3
 EntityFramework Core SQLiteをインストールする際にインストールされる
 DB操作ツール:DB Browser for SQLite
2Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
概要
 以下のサイトを参考にさせていただきました。
 ありがとうございます。
 Logging | Microsoft Docs
https://docs.microsoft.com/en-us/ef/core/miscellaneous/logging
 Part 2. Entity Framework Core 1.0 の基本的な使い方 – とあるコン
サルタントのつぶやき
https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10-part2/
 Entity Framework Core 1.0 で SQLite を使ってみる - ROMANCE
DAWN for the new world
http://gooner.hateblo.jp/entry/2016/03/04/071400
3Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
謝辞
プロジェクトの作成
2017/3/10 4Copyright (c) 2017 Eiwa System Management, Inc.
 クラスライブラリ
 プロジェクト名「KptBoardSystem」
 「Microsoft.EntityframeworkCore.Sqlite」
「Microsoft.EntityframewordCore.Tools」をNuGetでインス
トール
5Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
Modelプロジェクトの作成
 クラスライブラリ
 プロジェクト名「KptBoardSystemTest」
 「Microsoft.EntityframeworkCore」「xunit」
「xunit.runner.visualstudio」「Moq」をNuGetでインストール
6Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストプロジェクトの作成
インストール
2017/3/10 7Copyright (c) 2017 Eiwa System Management, Inc.
 「Microsoft.EntityframeworkCore.Sqlite」をインストール
8Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
NuGetでインストール
 「Microsoft.EntityframeworkCore.Tools」をインストール
 インストールすると、マイグレーション機能が使えるようになる
9Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
NuGetでインストール
 インストール時にセキュリティエラーが出るのは、スクリプト
実行権限がないため。
 Visual Studioを管理者権限で実行して、再度インストールす
る。
10Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
NuGetでインストール
データモデルとテーブルの作成
2017/3/10 11Copyright (c) 2017 Eiwa System Management, Inc.
12Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
Userクラスの作成
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace KptBoardSystem
{
[Table("Users")] // テーブル名をクラス名の複数形に指定
public class User
{
public int UserId { get; set; }
[Required] // Nameフィールドは必須
public string Name { get; set; }
}
}
User.cs
13Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
KptBoardModelクラスの作成
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
namespace KptBoardSystem
{
public class KptBoardModel : DbContext
{
public DbSet<User> Users { get; internal set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connectionString =
new SqliteConnectionStringBuilder { DataSource = "../../../kpt.db" }.ToString();
optionsBuilder.UseSqlite(new SqliteConnection(connectionString));
}
}
}
KptBoardModel.cs
 パッケージマネージャコンソールにて、コマンドを実行する
 > Enable-Migrations
 マイグレーションができるようにする
 パスに日本語が含まれていたり、スタートアッププロジェクトに設定していないとエ
ラーになる
 > Add-Migration step00
 マイグレーション用のコード「XXX_step00.cs」が作成される
14Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
マイグレーションの準備
 パッケージマネージャコンソールにて、コマンドを実行する
 > Update-Database
 ソリューションの直下に「kpt.db」が作成される
15Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
マイグレーションの実施
 DB Browser for SQLiteにて「kpt.db」を開く
 「Users」テーブルが作成できていることを確認
16Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
データベースの確認
テストからのレコード作成
2017/3/10 17Copyright (c) 2017 Eiwa System Management, Inc.
 KptBoardSystemTestプロジェクトで[参照の追加]
 [プロジェクト]>[KptBoardSystem]をチェックして[OK]
18Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テスト対象の参照設定をする
19Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストコードの作成
using Xunit;
namespace KptBoardSystem.Test // Testの前に「.」を追加する
{
public class KptBoardModelTest
{
[Fact]
public void TestInsertUser()
{
using (var db = new KptBoardModel())
{
var user = new User
{
Name = "User01"
};
db.Add(user);
db.SaveChanges();
}
}
}
}
KptBoardModelTest.cs
 作成したテストを実行する
 DB Browser for SQLでレコードが挿入されているのを確認
する
20Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストの実施
データモデルの変更と
マイグレーション
2017/3/10 21Copyright (c) 2017 Eiwa System Management, Inc.
22Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
Userクラスの修正
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace KptBoardSystem
{
[Table("Users")]
public class User
{
public int UserId { get; set; }
[Required]
public string Name { get; set; }
public int? Age { get; set; } // プロパティを追加。nullも可能な「int?」型にする
}
}
User.cs
 パッケージマネージャコンソールにて、コマンドを実行する
 > Add-Migration step01
 マイグレーション用のコード「XXX_step01.cs」が作成される
23Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
マイグレーションの準備
 パッケージマネージャコンソールにて、コマンドを実行する
 > Update-Database
 「Users」テーブルに列が追加される
 「Age」列が追加されたのを確認する
24Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
マイグレーションの実行
25Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストコードの修正
using Xunit;
using System.Linq;
namespace KptBoardSystem.Test
{
public class KptBoardModelTest
{
[Fact]
public void TestInsertUser()
{
using (var db = new KptBoardModel())
{
// 全レコードを削除
foreach (var u in db.Users.ToArray())
{
db.Remove<User>(u);
}
db.Add(new User { Name = "User01" });
db.Add(new User { Name = "User02", Age = 2 });
db.SaveChanges();
}
}
}
}
KptBoardModelTest.cs
 修正したテストを実行する
 DB Browser for SQLでレコードが挿入されているのを確認
する
 レコードを削除しているので、UserIdが新しくなっている
26Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストの実施
関連テーブル
2017/3/10 27Copyright (c) 2017 Eiwa System Management, Inc.
28Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
クラス図
KptBoardModel
<<Table("Users")>>
+ <<get, set>> KptBoards : List<KptBoard>
+ AddKptBoard(kptBoard : int) : KptBoard
+ <<get, set>> UserId : int
+ <<get, set>> Age : int
+ <<get, set>> Name : string
User
<<Table("KptBoards")>>
+ <<get, set>> UserId : int
+ <<get, set>> KptBoardId : int
+ <<get, set>> Problem : string
+ <<get, set>> Try : string
+ <<get, set>> Keep : string
+ <<get, set>> Time : DateTime
KptBoard
- _kptBoards
0..*1
29Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
KptBoardクラスを追加
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace KptBoardSystem
{
[Table("KptBards")] // テーブル名をクラス名の複数形に指定
public class KptBoard
{
public int KptBoardId { get; set; }
[Required]
public DateTime Time { get; set; }
public string Keep { get; set; }
public string Problem { get; set; }
public string Try { get; set; }
public int UserId { get; set; } // 外部キーとして、UserクラスのUserIdと同じ名称を指定
}
}
KptBoard.cs
30Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
Userクラスを修正
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace KptBoardSystem
{
[Table("Users")]
public class User
{
private List<KptBoard> _kptBoards = new List<KptBoard>(); //KptBoardを複数持てるようにListを使用
public int UserId { get; set; }
[Required]
public string Name { get; set; }
public int? Age { get; set; }
public List<KptBoard> KptBoards
{
get { return _kptBoards; }
set { _kptBoards = value; }
}
public void AddKptBoard(KptBoard kptBoard)
{
_kptBoards.Add(kptBoard);
}
}
}
User.cs
31Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
KptBoardModelクラスを修正
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
namespace KptBoardSystem
{
public class KptBoardModel : DbContext
{
public DbSet<User> Users { get; internal set; }
public DbSet<KptBoard> KptBoards { get; internal set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connectionString =
new SqliteConnectionStringBuilder { DataSource = "../../../kpt.db" }.ToString();
optionsBuilder.UseSqlite(new SqliteConnection(connectionString));
}
}
}
KptBoardModel.cs
 パッケージマネージャコンソールにて、コマンドを実行する
 > Add-Migration step02
 マイグレーション用のコード「XXX_step02.cs」が作成される
32Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
マイグレーションの準備
 パッケージマネージャコンソールにて、コマンドを実行する
 > Update-Database
 「KptBoards」テーブルが追加される
33Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
マイグレーションの実行
34Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストメソッドを追加
using Xunit;
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace KptBoardSystem.Test
{
public class KptBoardModelTest
{
[Fact(DisplayName = "既存のユーザーにKptBoardを追加する")]
public void TestInsertKptBoard()
{
using (var db = new KptBoardModel())
{
var user02 = db.Users.Where((u) => u.Name == "User02").Include("KptBoards").First();
user02.AddKptBoard(new KptBoard
{
Time = DateTime.Now,
Keep = "続けること", Problem = "不満なこと", Try = "Tryは次に試すこと。"
});
db.Update(user02); // 更新
db.SaveChanges();
}
}
[Fact]
public void TestInsertUser()
KptBoardModelTest.cs
 追加したテストを単体で実行する
 DB Browser for SQLでレコードが挿入されているのを確認
する
35Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストの実施
36Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストメソッドを追加
using Xunit;
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace KptBoardSystem.Test
{
public class KptBoardModelTest
{
[Fact(DisplayName = "新規にユーザーとKptBoardを追加する")]
public void TestInsertUserAndKptBoard()
{
using (var db = new KptBoardModel())
{
var user = new User // Userが1つ、KptBoardが3つのインスタンスを作り上げる
{
Name = "User03", Age = 3,
KptBoards =
{
new KptBoard { Time = DateTime.Now, Keep = "続けることだけ" },
new KptBoard { Time = DateTime.Now, Problem = "続けることだけ" },
new KptBoard { Time = DateTime.Now, Try = "試すことだけ" },
}
};
db.Add(user); // 追加
db.SaveChanges();
}
}
KptBoardModelTest.cs
 追加したテストを単体で実行する
 DB Browser for SQLでレコードが挿入されているのを確認
する
37Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストの実施
38Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストメソッドを追加
using Xunit;
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace KptBoardSystem.Test
{
public class KptBoardModelTest
{
[Fact(DisplayName = "KptBoardを修正する")]
public void TestUpdateKptBoard()
{
using (var db = new KptBoardModel())
{
var kptBoard = db.KptBoards.Where(b => b.Problem.Contains("続ける")).First();
kptBoard.Problem = "問題だけ";
db.Update(kptBoard); // 更新
db.SaveChanges();
}
}
KptBoardModelTest.cs
 追加したテストを単体で実行する
 DB Browser for SQLでレコードが更新されているのを確認
する
39Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストの実施
40Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストメソッドを追加
using Xunit;
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace KptBoardModel.Test
{
public class KptBoardModelTest
{
[Fact(DisplayName = "KptBoardを削除する")]
public void TestDeleteKptBoard()
{
using (var db = new KptBoardModel())
{
var kptBoard = db.KptBoards.Where(b => b.Problem == "問題だけ").First();
db.Remove(kptBoard); // 削除
db.SaveChanges();
}
}
KptBoardModelTest.cs
 追加したテストを単体で実行する
 DB Browser for SQLでレコードが削除されているのを確認
する
41Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストの実施
42Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストメソッドを追加
using Xunit;
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace KptBoardModel.Test
{
public class KptBoardModelTest
{
[Fact(DisplayName = "KptBoardを持っているUserを削除する")]
public void TestDeleteUserHasKptBoard()
{
using (var db = new KptBoardModel())
{
// Includeしていないので、Userの情報しか取れない
var user = db.Users.Where((u) => u.Name == "User03").First();
db.Remove(user); // 削除
db.SaveChanges();
}
}
KptBoardModelTest.cs
 追加したテストを単体で実行する
 DB Browser for SQLでレコードが削除されているのを確認
する
 Userを消しただけだが、KptBoardも一緒に消える
43Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10
テストの実施

More Related Content

What's hot

Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
Re: ゼロから始める監視設計
Re: ゼロから始める監視設計Re: ゼロから始める監視設計
Re: ゼロから始める監視設計Masahito Zembutsu
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11Sadayuki Furuhashi
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門to_ueda
 
やってはいけない空振りDelete
やってはいけない空振りDeleteやってはいけない空振りDelete
やってはいけない空振りDeleteYu Yamada
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRecruit Technologies
 
DevOpsに求められる様々な技術とその連携の学習方法
DevOpsに求められる様々な技術とその連携の学習方法DevOpsに求められる様々な技術とその連携の学習方法
DevOpsに求められる様々な技術とその連携の学習方法CASAREAL, Inc.
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!オラクルエンジニア通信
 
DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所Hidetoshi Hirokawa
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門dsuke Takaoka
 
入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語る
入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語る入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語る
入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語るClassmethod,Inc.
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - 健人 井関
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)NTT DATA Technology & Innovation
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective GitChanwoong Kim
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
SharePoint モダン サイト ~ サイト デザインとサイト スクリプト~
SharePoint モダン サイト ~ サイト デザインとサイト スクリプト~SharePoint モダン サイト ~ サイト デザインとサイト スクリプト~
SharePoint モダン サイト ~ サイト デザインとサイト スクリプト~Ai Hirano
 
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜Teppei Sato
 

What's hot (20)

Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
Re: ゼロから始める監視設計
Re: ゼロから始める監視設計Re: ゼロから始める監視設計
Re: ゼロから始める監視設計
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
やってはいけない空振りDelete
やってはいけない空振りDeleteやってはいけない空振りDelete
やってはいけない空振りDelete
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 
DevOpsに求められる様々な技術とその連携の学習方法
DevOpsに求められる様々な技術とその連携の学習方法DevOpsに求められる様々な技術とその連携の学習方法
DevOpsに求められる様々な技術とその連携の学習方法
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!
 
DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所
 
デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門
 
入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語る
入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語る入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語る
入社100日の新人がクラスメソッドでの激速の日々を赤裸々に語る
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
SharePoint モダン サイト ~ サイト デザインとサイト スクリプト~
SharePoint モダン サイト ~ サイト デザインとサイト スクリプト~SharePoint モダン サイト ~ サイト デザインとサイト スクリプト~
SharePoint モダン サイト ~ サイト デザインとサイト スクリプト~
 
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
 

Viewers also liked

KPTAふりかえり体験研修のご紹介
KPTAふりかえり体験研修のご紹介KPTAふりかえり体験研修のご紹介
KPTAふりかえり体験研修のご紹介ESM SEC
 
Community Open Day 2013 JP - EF CodeFirst DEMO
Community Open Day 2013 JP - EF CodeFirst DEMOCommunity Open Day 2013 JP - EF CodeFirst DEMO
Community Open Day 2013 JP - EF CodeFirst DEMOokumar savurou
 
チームファシリテーション体験研修のご紹介
チームファシリテーション体験研修のご紹介チームファシリテーション体験研修のご紹介
チームファシリテーション体験研修のご紹介ESM SEC
 
KPTふりかえり実践研修のご紹介
KPTふりかえり実践研修のご紹介KPTふりかえり実践研修のご紹介
KPTふりかえり実践研修のご紹介ESM SEC
 
KPTふりかえり会体験研修のご紹介
KPTふりかえり会体験研修のご紹介KPTふりかえり会体験研修のご紹介
KPTふりかえり会体験研修のご紹介ESM SEC
 
俺たちのKPTA
俺たちのKPTA俺たちのKPTA
俺たちのKPTAESM SEC
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたNarami Kiyokura
 
ESMのアジャイル開発
ESMのアジャイル開発ESMのアジャイル開発
ESMのアジャイル開発ESM SEC
 
コーディング不要! Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書
コーディング不要!Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書コーディング不要!Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書
コーディング不要! Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書Masaki Takeda
 
KPTの理論と実践 公開用 プロジェクトへの「ふりかえりカイゼン」の導入で学んだこと
KPTの理論と実践 公開用 プロジェクトへの「ふりかえりカイゼン」の導入で学んだことKPTの理論と実践 公開用 プロジェクトへの「ふりかえりカイゼン」の導入で学んだこと
KPTの理論と実践 公開用 プロジェクトへの「ふりかえりカイゼン」の導入で学んだことESM SEC
 
KPTの基本と、その活用法
KPTの基本と、その活用法KPTの基本と、その活用法
KPTの基本と、その活用法ESM SEC
 
キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06Toru Koido
 
Fast Data を扱うためのデザインパターン
Fast Data を扱うためのデザインパターンFast Data を扱うためのデザインパターン
Fast Data を扱うためのデザインパターンMapR Technologies Japan
 
アジャイルってなにが美味しいの
アジャイルってなにが美味しいのアジャイルってなにが美味しいの
アジャイルってなにが美味しいのYasui Tsutomu
 
Geldsystem, ESM (Europäischer Stabilitätsmechanismus), Eurobonds
Geldsystem, ESM (Europäischer Stabilitätsmechanismus), EurobondsGeldsystem, ESM (Europäischer Stabilitätsmechanismus), Eurobonds
Geldsystem, ESM (Europäischer Stabilitätsmechanismus), EurobondsFlorian Hörantner
 
今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発Kaoru Nakajima
 
Tangible Bug Tracking Using LEGO Bricks in Agile2008, Toronto
Tangible Bug Tracking Using LEGO Bricks in Agile2008, TorontoTangible Bug Tracking Using LEGO Bricks in Agile2008, Toronto
Tangible Bug Tracking Using LEGO Bricks in Agile2008, TorontoTakeshi Kakeda
 
JaSST 20080130 バグレゴ
JaSST 20080130 バグレゴJaSST 20080130 バグレゴ
JaSST 20080130 バグレゴTakeshi Kakeda
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm伸男 伊藤
 

Viewers also liked (20)

KPTAふりかえり体験研修のご紹介
KPTAふりかえり体験研修のご紹介KPTAふりかえり体験研修のご紹介
KPTAふりかえり体験研修のご紹介
 
Community Open Day 2013 JP - EF CodeFirst DEMO
Community Open Day 2013 JP - EF CodeFirst DEMOCommunity Open Day 2013 JP - EF CodeFirst DEMO
Community Open Day 2013 JP - EF CodeFirst DEMO
 
チームファシリテーション体験研修のご紹介
チームファシリテーション体験研修のご紹介チームファシリテーション体験研修のご紹介
チームファシリテーション体験研修のご紹介
 
KPTふりかえり実践研修のご紹介
KPTふりかえり実践研修のご紹介KPTふりかえり実践研修のご紹介
KPTふりかえり実践研修のご紹介
 
KPTふりかえり会体験研修のご紹介
KPTふりかえり会体験研修のご紹介KPTふりかえり会体験研修のご紹介
KPTふりかえり会体験研修のご紹介
 
俺たちのKPTA
俺たちのKPTA俺たちのKPTA
俺たちのKPTA
 
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみたADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
 
ESMのアジャイル開発
ESMのアジャイル開発ESMのアジャイル開発
ESMのアジャイル開発
 
コーディング不要! Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書
コーディング不要!Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書コーディング不要!Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書
コーディング不要! Entity Framework 6.1.3 + ASP.NET MVC 5 サンプル アプリケーション構築 手順書
 
KPTの理論と実践 公開用 プロジェクトへの「ふりかえりカイゼン」の導入で学んだこと
KPTの理論と実践 公開用 プロジェクトへの「ふりかえりカイゼン」の導入で学んだことKPTの理論と実践 公開用 プロジェクトへの「ふりかえりカイゼン」の導入で学んだこと
KPTの理論と実践 公開用 プロジェクトへの「ふりかえりカイゼン」の導入で学んだこと
 
KPTの基本と、その活用法
KPTの基本と、その活用法KPTの基本と、その活用法
KPTの基本と、その活用法
 
キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06
 
Fast Data を扱うためのデザインパターン
Fast Data を扱うためのデザインパターンFast Data を扱うためのデザインパターン
Fast Data を扱うためのデザインパターン
 
アジャイルってなにが美味しいの
アジャイルってなにが美味しいのアジャイルってなにが美味しいの
アジャイルってなにが美味しいの
 
Esm slideshare ppt
Esm slideshare pptEsm slideshare ppt
Esm slideshare ppt
 
Geldsystem, ESM (Europäischer Stabilitätsmechanismus), Eurobonds
Geldsystem, ESM (Europäischer Stabilitätsmechanismus), EurobondsGeldsystem, ESM (Europäischer Stabilitätsmechanismus), Eurobonds
Geldsystem, ESM (Europäischer Stabilitätsmechanismus), Eurobonds
 
今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発今風なデスクトップアプリのモダンインストーラー開発
今風なデスクトップアプリのモダンインストーラー開発
 
Tangible Bug Tracking Using LEGO Bricks in Agile2008, Toronto
Tangible Bug Tracking Using LEGO Bricks in Agile2008, TorontoTangible Bug Tracking Using LEGO Bricks in Agile2008, Toronto
Tangible Bug Tracking Using LEGO Bricks in Agile2008, Toronto
 
JaSST 20080130 バグレゴ
JaSST 20080130 バグレゴJaSST 20080130 バグレゴ
JaSST 20080130 バグレゴ
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 

Similar to 「Entity Framework Coreを使ってみる」 公開用

Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...Shotaro Suzuki
 
[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要Tatsuhiko Tanaka
 
Microsoft Tunnel 概要
Microsoft Tunnel 概要Microsoft Tunnel 概要
Microsoft Tunnel 概要Yutaro Tamai
 
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書Masaki Takeda
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーションYuta Matsumura
 
New Features in C# 10/11
New Features in C# 10/11New Features in C# 10/11
New Features in C# 10/11Akira Inoue
 
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...NTT DATA Technology & Innovation
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionYoshitaka Seo
 
1000人規模で使う分析基盤構築 〜redshiftを活用したeuc
1000人規模で使う分析基盤構築  〜redshiftを活用したeuc1000人規模で使う分析基盤構築  〜redshiftを活用したeuc
1000人規模で使う分析基盤構築 〜redshiftを活用したeucKazuhiro Miyajima
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みモバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みMorioImai
 
Tech Ed 2010 Japan T1-310 Microsoft Online Services 展開時の実践テクニック
Tech Ed 2010 Japan T1-310 Microsoft Online Services 展開時の実践テクニックTech Ed 2010 Japan T1-310 Microsoft Online Services 展開時の実践テクニック
Tech Ed 2010 Japan T1-310 Microsoft Online Services 展開時の実践テクニックkumo2010
 
Interact 2018:PowerShell of Microsoft SDN v2 101
Interact 2018:PowerShell of Microsoft SDN v2 101Interact 2018:PowerShell of Microsoft SDN v2 101
Interact 2018:PowerShell of Microsoft SDN v2 101wind06106
 
C# Database操作3 データの更新-
C# Database操作3  データの更新-C# Database操作3  データの更新-
C# Database操作3 データの更新-Hiroki Takahashi
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01Yusuke Ando
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 日本マイクロソフト株式会社
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理junichi anno
 
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...Masaki Takeda
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Masayuki Ozawa
 
Microsoft Endpoint Manager Tenant Attach のご紹介
Microsoft Endpoint Manager Tenant Attach のご紹介Microsoft Endpoint Manager Tenant Attach のご紹介
Microsoft Endpoint Manager Tenant Attach のご紹介Yutaro Tamai
 
C# Database操作6 SqlDataAdapterを使用したデータの更新-
C# Database操作6  SqlDataAdapterを使用したデータの更新-C# Database操作6  SqlDataAdapterを使用したデータの更新-
C# Database操作6 SqlDataAdapterを使用したデータの更新-Hiroki Takahashi
 

Similar to 「Entity Framework Coreを使ってみる」 公開用 (20)

Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
 
[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要
 
Microsoft Tunnel 概要
Microsoft Tunnel 概要Microsoft Tunnel 概要
Microsoft Tunnel 概要
 
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書Entity Framework 6.1.3 + Windows フォームサンプル アプリケーション構築手順書
Entity Framework 6.1.3 + Windows フォーム サンプル アプリケーション構築 手順書
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
 
New Features in C# 10/11
New Features in C# 10/11New Features in C# 10/11
New Features in C# 10/11
 
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
1000人規模で使う分析基盤構築 〜redshiftを活用したeuc
1000人規模で使う分析基盤構築  〜redshiftを活用したeuc1000人規模で使う分析基盤構築  〜redshiftを活用したeuc
1000人規模で使う分析基盤構築 〜redshiftを活用したeuc
 
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組みモバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
 
Tech Ed 2010 Japan T1-310 Microsoft Online Services 展開時の実践テクニック
Tech Ed 2010 Japan T1-310 Microsoft Online Services 展開時の実践テクニックTech Ed 2010 Japan T1-310 Microsoft Online Services 展開時の実践テクニック
Tech Ed 2010 Japan T1-310 Microsoft Online Services 展開時の実践テクニック
 
Interact 2018:PowerShell of Microsoft SDN v2 101
Interact 2018:PowerShell of Microsoft SDN v2 101Interact 2018:PowerShell of Microsoft SDN v2 101
Interact 2018:PowerShell of Microsoft SDN v2 101
 
C# Database操作3 データの更新-
C# Database操作3  データの更新-C# Database操作3  データの更新-
C# Database操作3 データの更新-
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
Microsoft Endpoint Manager Tenant Attach のご紹介
Microsoft Endpoint Manager Tenant Attach のご紹介Microsoft Endpoint Manager Tenant Attach のご紹介
Microsoft Endpoint Manager Tenant Attach のご紹介
 
C# Database操作6 SqlDataAdapterを使用したデータの更新-
C# Database操作6  SqlDataAdapterを使用したデータの更新-C# Database操作6  SqlDataAdapterを使用したデータの更新-
C# Database操作6 SqlDataAdapterを使用したデータの更新-
 

More from ESM SEC

「ふりかえり」は、Retrospectiveか、Reflectionか
「ふりかえり」は、Retrospectiveか、Reflectionか「ふりかえり」は、Retrospectiveか、Reflectionか
「ふりかえり」は、Retrospectiveか、ReflectionかESM SEC
 
日本におけるアジャイル開発の認知度の変遷を情報処理技術者試験の問題から考察してみた_公開用
日本におけるアジャイル開発の認知度の変遷を情報処理技術者試験の問題から考察してみた_公開用日本におけるアジャイル開発の認知度の変遷を情報処理技術者試験の問題から考察してみた_公開用
日本におけるアジャイル開発の認知度の変遷を情報処理技術者試験の問題から考察してみた_公開用ESM SEC
 
製品の質と、仕事の質を向上させるふりかえりの活用
製品の質と、仕事の質を向上させるふりかえりの活用製品の質と、仕事の質を向上させるふりかえりの活用
製品の質と、仕事の質を向上させるふりかえりの活用ESM SEC
 
ふりかえり支援ツールを用いたリモートふりかえり会のファシリテーション方法の提案
ふりかえり支援ツールを用いたリモートふりかえり会のファシリテーション方法の提案ふりかえり支援ツールを用いたリモートふりかえり会のファシリテーション方法の提案
ふりかえり支援ツールを用いたリモートふりかえり会のファシリテーション方法の提案ESM SEC
 
ふりかえり会は懺悔の場でも責任追及の場でもありません、過去の学びを活かして幸福な未来を作る行動を生み出す場です
ふりかえり会は懺悔の場でも責任追及の場でもありません、過去の学びを活かして幸福な未来を作る行動を生み出す場ですふりかえり会は懺悔の場でも責任追及の場でもありません、過去の学びを活かして幸福な未来を作る行動を生み出す場です
ふりかえり会は懺悔の場でも責任追及の場でもありません、過去の学びを活かして幸福な未来を作る行動を生み出す場ですESM SEC
 
KPTとKPTA
KPTとKPTAKPTとKPTA
KPTとKPTAESM SEC
 
けぷ人とけぷ太
けぷ人とけぷ太けぷ人とけぷ太
けぷ人とけぷ太ESM SEC
 
「システムメタファ」再考 公開用
「システムメタファ」再考 公開用「システムメタファ」再考 公開用
「システムメタファ」再考 公開用ESM SEC
 
アジャイル開発の事例と動向 公開用
アジャイル開発の事例と動向 公開用アジャイル開発の事例と動向 公開用
アジャイル開発の事例と動向 公開用ESM SEC
 
「失敗事例から学ぶアジャイル開発」研修の紹介
「失敗事例から学ぶアジャイル開発」研修の紹介「失敗事例から学ぶアジャイル開発」研修の紹介
「失敗事例から学ぶアジャイル開発」研修の紹介ESM SEC
 
ゼロから始めるプロダクト開発
ゼロから始めるプロダクト開発ゼロから始めるプロダクト開発
ゼロから始めるプロダクト開発ESM SEC
 
アジャイル開発をよりアジャイルに
アジャイル開発をよりアジャイルにアジャイル開発をよりアジャイルに
アジャイル開発をよりアジャイルにESM SEC
 
ふりかえりで学んだこと ベスト10
ふりかえりで学んだこと ベスト10ふりかえりで学んだこと ベスト10
ふりかえりで学んだこと ベスト10ESM SEC
 
「アジャイルコーチの7つ道具」の使い方
「アジャイルコーチの7つ道具」の使い方「アジャイルコーチの7つ道具」の使い方
「アジャイルコーチの7つ道具」の使い方ESM SEC
 
ワークショップ 明日からはじめるアジャイル
ワークショップ 明日からはじめるアジャイルワークショップ 明日からはじめるアジャイル
ワークショップ 明日からはじめるアジャイルESM SEC
 
アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版ESM SEC
 
Pull Request & TDD 入門
Pull Request & TDD 入門Pull Request & TDD 入門
Pull Request & TDD 入門ESM SEC
 
うそのアジャイル、まことのアジャイル 公開用
うそのアジャイル、まことのアジャイル 公開用うそのアジャイル、まことのアジャイル 公開用
うそのアジャイル、まことのアジャイル 公開用ESM SEC
 
KPTのコツを掴め!! 公開用
KPTのコツを掴め!! 公開用KPTのコツを掴め!! 公開用
KPTのコツを掴め!! 公開用ESM SEC
 
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~ESM SEC
 

More from ESM SEC (20)

「ふりかえり」は、Retrospectiveか、Reflectionか
「ふりかえり」は、Retrospectiveか、Reflectionか「ふりかえり」は、Retrospectiveか、Reflectionか
「ふりかえり」は、Retrospectiveか、Reflectionか
 
日本におけるアジャイル開発の認知度の変遷を情報処理技術者試験の問題から考察してみた_公開用
日本におけるアジャイル開発の認知度の変遷を情報処理技術者試験の問題から考察してみた_公開用日本におけるアジャイル開発の認知度の変遷を情報処理技術者試験の問題から考察してみた_公開用
日本におけるアジャイル開発の認知度の変遷を情報処理技術者試験の問題から考察してみた_公開用
 
製品の質と、仕事の質を向上させるふりかえりの活用
製品の質と、仕事の質を向上させるふりかえりの活用製品の質と、仕事の質を向上させるふりかえりの活用
製品の質と、仕事の質を向上させるふりかえりの活用
 
ふりかえり支援ツールを用いたリモートふりかえり会のファシリテーション方法の提案
ふりかえり支援ツールを用いたリモートふりかえり会のファシリテーション方法の提案ふりかえり支援ツールを用いたリモートふりかえり会のファシリテーション方法の提案
ふりかえり支援ツールを用いたリモートふりかえり会のファシリテーション方法の提案
 
ふりかえり会は懺悔の場でも責任追及の場でもありません、過去の学びを活かして幸福な未来を作る行動を生み出す場です
ふりかえり会は懺悔の場でも責任追及の場でもありません、過去の学びを活かして幸福な未来を作る行動を生み出す場ですふりかえり会は懺悔の場でも責任追及の場でもありません、過去の学びを活かして幸福な未来を作る行動を生み出す場です
ふりかえり会は懺悔の場でも責任追及の場でもありません、過去の学びを活かして幸福な未来を作る行動を生み出す場です
 
KPTとKPTA
KPTとKPTAKPTとKPTA
KPTとKPTA
 
けぷ人とけぷ太
けぷ人とけぷ太けぷ人とけぷ太
けぷ人とけぷ太
 
「システムメタファ」再考 公開用
「システムメタファ」再考 公開用「システムメタファ」再考 公開用
「システムメタファ」再考 公開用
 
アジャイル開発の事例と動向 公開用
アジャイル開発の事例と動向 公開用アジャイル開発の事例と動向 公開用
アジャイル開発の事例と動向 公開用
 
「失敗事例から学ぶアジャイル開発」研修の紹介
「失敗事例から学ぶアジャイル開発」研修の紹介「失敗事例から学ぶアジャイル開発」研修の紹介
「失敗事例から学ぶアジャイル開発」研修の紹介
 
ゼロから始めるプロダクト開発
ゼロから始めるプロダクト開発ゼロから始めるプロダクト開発
ゼロから始めるプロダクト開発
 
アジャイル開発をよりアジャイルに
アジャイル開発をよりアジャイルにアジャイル開発をよりアジャイルに
アジャイル開発をよりアジャイルに
 
ふりかえりで学んだこと ベスト10
ふりかえりで学んだこと ベスト10ふりかえりで学んだこと ベスト10
ふりかえりで学んだこと ベスト10
 
「アジャイルコーチの7つ道具」の使い方
「アジャイルコーチの7つ道具」の使い方「アジャイルコーチの7つ道具」の使い方
「アジャイルコーチの7つ道具」の使い方
 
ワークショップ 明日からはじめるアジャイル
ワークショップ 明日からはじめるアジャイルワークショップ 明日からはじめるアジャイル
ワークショップ 明日からはじめるアジャイル
 
アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版
 
Pull Request & TDD 入門
Pull Request & TDD 入門Pull Request & TDD 入門
Pull Request & TDD 入門
 
うそのアジャイル、まことのアジャイル 公開用
うそのアジャイル、まことのアジャイル 公開用うそのアジャイル、まことのアジャイル 公開用
うそのアジャイル、まことのアジャイル 公開用
 
KPTのコツを掴め!! 公開用
KPTのコツを掴め!! 公開用KPTのコツを掴め!! 公開用
KPTのコツを掴め!! 公開用
 
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
「カイゼンできてますか? ~KPTAでわかる!行動カイゼン~
 

「Entity Framework Coreを使ってみる」 公開用

  • 1. Entity Framework Coreを使ってみる Core 1.1.0/SQLite編 2017/3/10 1Copyright (c) 2017 Eiwa System Management, Inc. 株式会社永和システムマネジメント コンサルティングセンター センター長 天野勝 http://www.esm.co.jp/service/consulting/
  • 2.  作成アプリケーション  KPTボード  動作確認環境  対象:Entity Framework Core 1.1.0  OS:Windows10 64bit  IDE:Visual Studio 2015 Community  RDBMS:SQLite3  EntityFramework Core SQLiteをインストールする際にインストールされる  DB操作ツール:DB Browser for SQLite 2Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 概要
  • 3.  以下のサイトを参考にさせていただきました。  ありがとうございます。  Logging | Microsoft Docs https://docs.microsoft.com/en-us/ef/core/miscellaneous/logging  Part 2. Entity Framework Core 1.0 の基本的な使い方 – とあるコン サルタントのつぶやき https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10-part2/  Entity Framework Core 1.0 で SQLite を使ってみる - ROMANCE DAWN for the new world http://gooner.hateblo.jp/entry/2016/03/04/071400 3Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 謝辞
  • 4. プロジェクトの作成 2017/3/10 4Copyright (c) 2017 Eiwa System Management, Inc.
  • 5.  クラスライブラリ  プロジェクト名「KptBoardSystem」  「Microsoft.EntityframeworkCore.Sqlite」 「Microsoft.EntityframewordCore.Tools」をNuGetでインス トール 5Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 Modelプロジェクトの作成
  • 6.  クラスライブラリ  プロジェクト名「KptBoardSystemTest」  「Microsoft.EntityframeworkCore」「xunit」 「xunit.runner.visualstudio」「Moq」をNuGetでインストール 6Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストプロジェクトの作成
  • 7. インストール 2017/3/10 7Copyright (c) 2017 Eiwa System Management, Inc.
  • 8.  「Microsoft.EntityframeworkCore.Sqlite」をインストール 8Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 NuGetでインストール
  • 10.  インストール時にセキュリティエラーが出るのは、スクリプト 実行権限がないため。  Visual Studioを管理者権限で実行して、再度インストールす る。 10Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 NuGetでインストール
  • 12. 12Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 Userクラスの作成 using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace KptBoardSystem { [Table("Users")] // テーブル名をクラス名の複数形に指定 public class User { public int UserId { get; set; } [Required] // Nameフィールドは必須 public string Name { get; set; } } } User.cs
  • 13. 13Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 KptBoardModelクラスの作成 using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; namespace KptBoardSystem { public class KptBoardModel : DbContext { public DbSet<User> Users { get; internal set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var connectionString = new SqliteConnectionStringBuilder { DataSource = "../../../kpt.db" }.ToString(); optionsBuilder.UseSqlite(new SqliteConnection(connectionString)); } } } KptBoardModel.cs
  • 14.  パッケージマネージャコンソールにて、コマンドを実行する  > Enable-Migrations  マイグレーションができるようにする  パスに日本語が含まれていたり、スタートアッププロジェクトに設定していないとエ ラーになる  > Add-Migration step00  マイグレーション用のコード「XXX_step00.cs」が作成される 14Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 マイグレーションの準備
  • 15.  パッケージマネージャコンソールにて、コマンドを実行する  > Update-Database  ソリューションの直下に「kpt.db」が作成される 15Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 マイグレーションの実施
  • 16.  DB Browser for SQLiteにて「kpt.db」を開く  「Users」テーブルが作成できていることを確認 16Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 データベースの確認
  • 19. 19Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストコードの作成 using Xunit; namespace KptBoardSystem.Test // Testの前に「.」を追加する { public class KptBoardModelTest { [Fact] public void TestInsertUser() { using (var db = new KptBoardModel()) { var user = new User { Name = "User01" }; db.Add(user); db.SaveChanges(); } } } } KptBoardModelTest.cs
  • 20.  作成したテストを実行する  DB Browser for SQLでレコードが挿入されているのを確認 する 20Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストの実施
  • 22. 22Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 Userクラスの修正 using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace KptBoardSystem { [Table("Users")] public class User { public int UserId { get; set; } [Required] public string Name { get; set; } public int? Age { get; set; } // プロパティを追加。nullも可能な「int?」型にする } } User.cs
  • 23.  パッケージマネージャコンソールにて、コマンドを実行する  > Add-Migration step01  マイグレーション用のコード「XXX_step01.cs」が作成される 23Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 マイグレーションの準備
  • 24.  パッケージマネージャコンソールにて、コマンドを実行する  > Update-Database  「Users」テーブルに列が追加される  「Age」列が追加されたのを確認する 24Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 マイグレーションの実行
  • 25. 25Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストコードの修正 using Xunit; using System.Linq; namespace KptBoardSystem.Test { public class KptBoardModelTest { [Fact] public void TestInsertUser() { using (var db = new KptBoardModel()) { // 全レコードを削除 foreach (var u in db.Users.ToArray()) { db.Remove<User>(u); } db.Add(new User { Name = "User01" }); db.Add(new User { Name = "User02", Age = 2 }); db.SaveChanges(); } } } } KptBoardModelTest.cs
  • 26.  修正したテストを実行する  DB Browser for SQLでレコードが挿入されているのを確認 する  レコードを削除しているので、UserIdが新しくなっている 26Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストの実施
  • 27. 関連テーブル 2017/3/10 27Copyright (c) 2017 Eiwa System Management, Inc.
  • 28. 28Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 クラス図 KptBoardModel <<Table("Users")>> + <<get, set>> KptBoards : List<KptBoard> + AddKptBoard(kptBoard : int) : KptBoard + <<get, set>> UserId : int + <<get, set>> Age : int + <<get, set>> Name : string User <<Table("KptBoards")>> + <<get, set>> UserId : int + <<get, set>> KptBoardId : int + <<get, set>> Problem : string + <<get, set>> Try : string + <<get, set>> Keep : string + <<get, set>> Time : DateTime KptBoard - _kptBoards 0..*1
  • 29. 29Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 KptBoardクラスを追加 using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace KptBoardSystem { [Table("KptBards")] // テーブル名をクラス名の複数形に指定 public class KptBoard { public int KptBoardId { get; set; } [Required] public DateTime Time { get; set; } public string Keep { get; set; } public string Problem { get; set; } public string Try { get; set; } public int UserId { get; set; } // 外部キーとして、UserクラスのUserIdと同じ名称を指定 } } KptBoard.cs
  • 30. 30Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 Userクラスを修正 using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace KptBoardSystem { [Table("Users")] public class User { private List<KptBoard> _kptBoards = new List<KptBoard>(); //KptBoardを複数持てるようにListを使用 public int UserId { get; set; } [Required] public string Name { get; set; } public int? Age { get; set; } public List<KptBoard> KptBoards { get { return _kptBoards; } set { _kptBoards = value; } } public void AddKptBoard(KptBoard kptBoard) { _kptBoards.Add(kptBoard); } } } User.cs
  • 31. 31Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 KptBoardModelクラスを修正 using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; namespace KptBoardSystem { public class KptBoardModel : DbContext { public DbSet<User> Users { get; internal set; } public DbSet<KptBoard> KptBoards { get; internal set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var connectionString = new SqliteConnectionStringBuilder { DataSource = "../../../kpt.db" }.ToString(); optionsBuilder.UseSqlite(new SqliteConnection(connectionString)); } } } KptBoardModel.cs
  • 32.  パッケージマネージャコンソールにて、コマンドを実行する  > Add-Migration step02  マイグレーション用のコード「XXX_step02.cs」が作成される 32Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 マイグレーションの準備
  • 33.  パッケージマネージャコンソールにて、コマンドを実行する  > Update-Database  「KptBoards」テーブルが追加される 33Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 マイグレーションの実行
  • 34. 34Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストメソッドを追加 using Xunit; using System; using System.Linq; using Microsoft.EntityFrameworkCore; namespace KptBoardSystem.Test { public class KptBoardModelTest { [Fact(DisplayName = "既存のユーザーにKptBoardを追加する")] public void TestInsertKptBoard() { using (var db = new KptBoardModel()) { var user02 = db.Users.Where((u) => u.Name == "User02").Include("KptBoards").First(); user02.AddKptBoard(new KptBoard { Time = DateTime.Now, Keep = "続けること", Problem = "不満なこと", Try = "Tryは次に試すこと。" }); db.Update(user02); // 更新 db.SaveChanges(); } } [Fact] public void TestInsertUser() KptBoardModelTest.cs
  • 35.  追加したテストを単体で実行する  DB Browser for SQLでレコードが挿入されているのを確認 する 35Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストの実施
  • 36. 36Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストメソッドを追加 using Xunit; using System; using System.Linq; using Microsoft.EntityFrameworkCore; namespace KptBoardSystem.Test { public class KptBoardModelTest { [Fact(DisplayName = "新規にユーザーとKptBoardを追加する")] public void TestInsertUserAndKptBoard() { using (var db = new KptBoardModel()) { var user = new User // Userが1つ、KptBoardが3つのインスタンスを作り上げる { Name = "User03", Age = 3, KptBoards = { new KptBoard { Time = DateTime.Now, Keep = "続けることだけ" }, new KptBoard { Time = DateTime.Now, Problem = "続けることだけ" }, new KptBoard { Time = DateTime.Now, Try = "試すことだけ" }, } }; db.Add(user); // 追加 db.SaveChanges(); } } KptBoardModelTest.cs
  • 37.  追加したテストを単体で実行する  DB Browser for SQLでレコードが挿入されているのを確認 する 37Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストの実施
  • 38. 38Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストメソッドを追加 using Xunit; using System; using System.Linq; using Microsoft.EntityFrameworkCore; namespace KptBoardSystem.Test { public class KptBoardModelTest { [Fact(DisplayName = "KptBoardを修正する")] public void TestUpdateKptBoard() { using (var db = new KptBoardModel()) { var kptBoard = db.KptBoards.Where(b => b.Problem.Contains("続ける")).First(); kptBoard.Problem = "問題だけ"; db.Update(kptBoard); // 更新 db.SaveChanges(); } } KptBoardModelTest.cs
  • 39.  追加したテストを単体で実行する  DB Browser for SQLでレコードが更新されているのを確認 する 39Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストの実施
  • 40. 40Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストメソッドを追加 using Xunit; using System; using System.Linq; using Microsoft.EntityFrameworkCore; namespace KptBoardModel.Test { public class KptBoardModelTest { [Fact(DisplayName = "KptBoardを削除する")] public void TestDeleteKptBoard() { using (var db = new KptBoardModel()) { var kptBoard = db.KptBoards.Where(b => b.Problem == "問題だけ").First(); db.Remove(kptBoard); // 削除 db.SaveChanges(); } } KptBoardModelTest.cs
  • 41.  追加したテストを単体で実行する  DB Browser for SQLでレコードが削除されているのを確認 する 41Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストの実施
  • 42. 42Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストメソッドを追加 using Xunit; using System; using System.Linq; using Microsoft.EntityFrameworkCore; namespace KptBoardModel.Test { public class KptBoardModelTest { [Fact(DisplayName = "KptBoardを持っているUserを削除する")] public void TestDeleteUserHasKptBoard() { using (var db = new KptBoardModel()) { // Includeしていないので、Userの情報しか取れない var user = db.Users.Where((u) => u.Name == "User03").First(); db.Remove(user); // 削除 db.SaveChanges(); } } KptBoardModelTest.cs
  • 43.  追加したテストを単体で実行する  DB Browser for SQLでレコードが削除されているのを確認 する  Userを消しただけだが、KptBoardも一緒に消える 43Copyright (c) 2017 Eiwa System Management, Inc.2017/3/10 テストの実施