お試し で大分理解できたので
実際に挑戦!
【環境】
Visual C#: 15.5.4(2017)
プロジェクト作成
お試し との変更点は
メインをフォームアプリにしたこと。
参照設定
フォームアプリプロジェクトへ、NuGet パッケージ管理から、下記をインストール。
- SQLitePCLRaw.bundle_e_sqlite3
- SQLitePCLRaw.bundle_sqlcipher
- SQLitePCLRaw.bundle_green
スタートアッププロジェクト
上記3つのプロジェクトについて、何をするかによって
スタートアッププロジェクトを切り替えないければならない。
- フォームプロジェクト
- フォームアプリを動かすときは、これがスタートアッププロジェクト
- ビジネスロジックプロジェクト
- マイグレーションをするときは、これがスタートアッププロジェクト
- ビジネスロジックテストプロジェクト
- テストをするときは、これがスタートアッププロジェクト
初回マイグレーション
エラー1
Add-Migration Initial
More than one DbContext was found. Specify which one to use. Use the '-Context' parameter for PowerShell commands and the '--context' parameter for dotnet commands.
原因
DbContext クラスが複数あったため。
解決
対象 DbContext クラスを指定してコマンド実行。
Add-Migration Initial -Context MyAppSystem.EmployeeModel
To undo this action, use Remove-Migration.
Update-Database -Context MyAppSystem.EmployeeModel
Applying migration '20180121111141_Initial'.
Done.
エラー2
Add-Migration Initial -Context MyAppSystem.EmployeeModel
Could not load assembly 'MyApp'. Ensure it is referenced by the startup project 'MyAppSystem'.
原因
パッケージ マネージャー コンソール上部にある
「既定のプロジェクト」が、MyApp になっていた。
解決
「既定のプロジェクト」を、MyAppSystem に変更。
フォームイベント
今回は、フォームロード時に走らせる処理として Main_Load メソッドとした。
Main の部分は、フォームクラス名を入れるのが通例らしい。
フォームプロパティのイベント一覧(雷マーク)において
Load => Main_Load
と設定するだけ。
射影
Entity の中から、特定のプロパティを取得する=表示カラムを絞る。
このことを「射影」というらしい。
var arrayEmployees = db.Employees
.Select(record => new {
record.EmployeeCode,
Name = record.FamilyName + " " + record.FirstName
})
.ToArray();
- record へ新しい配列をセットするよ~
- 配列のプロパティは、record.EmployeeCode と Name だよ~
- record.EmployeeCode はそのままでいいけど、Name は、record の FamilyName と FirstName を半角スペースで連結して戻してね~
という風に、計算や加工も含めて自由に取得できる。
record
この部分の表記方法を勉強中。
LINQ の考え方としては「配列の要素」を指していると思う。
foreach (var value in array) の value に当たる感じ?
今回は、DB から抽出したレコード群が要素なので
record としてみたけど、何でもよさそう。
Count()
データの個数。
db.Employees.Count()
カラム名指定
上記例に合わせると、こうなる。
dgvEmployees.Columns[nameof(Employee.EmployeeCode)].HeaderText = "従業員コード";
dgvEmployees.Columns[nameof(Name)].HeaderText = "氏名";
ここで面白いのが
Employee.EmployeeCode を EmployeeCode とするとエラー。
record.EmployeeCode としてもエラー。
Name は、何も付けなくてもエラーにならないどころか、想定通りに動く。
まだまだ意味がわかっていない。
参考サイト
Qiita:Entity Framework6で単純なデータ表示フォームを作成(2015-09-08)
→DataGridView へのデータの登録の仕方。DataGridView のカラム名の変更の仕方
Keibalight プログラミングを淡々と:【LINQ】要素の個数を取得するには(Count集計演算子)(2011-07-19)
→LINQ による、データ個数の数え方