Visual Studio Community 2019 を使用して、C#でコンソールアプリを作成し、NuGetパッケージマネージャーからEntityFramework 6 を追加していきます。(Visual Studio Community 2019のセットアップについては省略します。)
事前に Visual Studio Community 2019 に「SQLite/SQL Server Compact Toolbox」をセットアップしておく必要があります。詳細は、SQLite/SQL Server Compact Toolboxをインストールする を参照してください。
また、「SQLite」のGACがインストールされていないと「ADO.NET Entiry Data Model」の追加時に「SQLiteのデータプロバイダが見つからない」旨のエラーが出てしまうので、「SQLite」のセットアップも必要です。詳細は、SQLiteを追加インストールする を参照してください。
1.Visual Studio Community 2019 を起動して 「C#のWindowsコンソールアプリケーション(.NET Framework)」のプロジェクトを作成します。
2.メニュー「ツール(T)」-「NuGet パッケージ マネージャー(N)」-「ソリューションのNuGetパッケージの管理(N)…」を選択します。
3.左上の「参照」をクリックして、検索欄に「System.Data.SQLite.EF6.Migrations」と入力して検索を行い、検索結果の中から「System.Data.SQLite.EF6.Migrations」を選択して、現在のプロジェクトにインストールします。
4.下画面で「OK」をクリックします。
5.下画面で「同意する」をクリックします。
6.参照にEntityFrameworkとSystem.Data.SQLite が追加されます。
7.このプロジェクトへ新しい項目を追加します。
「ADO.NET Entiry Data Model」を選択して、「追加」をクリックします。
「データベースから Code First」を選択して、「次へ」をクリックします。
「新しい接続」をクリックします。
データソースが「SQLite Provider (Simple for EF6 by ErikEJ) (SQLite Provider (Simple for EF6 by ErikEJ))」になっていることを確認し(違っている場合は「変更(C)…」をクリックして変更します。)、「ソース」の「Data Source」にデータベースファイル(.dbファイル)へのフルパスを入力します。(※例の場合、コピーする文字列は、C:\Users\agrim\source\repos\ConsoleApp1\ConsoleApp1\cti_scs.db です。)
念のため、「テスト接続」をクリックして成功するか見てみます。失敗する場合は、パスを見直してください。「OK」をクリックして「接続のプロパティ」を閉じます。
「次へ」をクリックします。
「テーブル」の前のチェックを付けて、すべてのテーブルをモデルに含めるようにします。「完了」をクリックします。
モデルが生成されます。
8.モデル(テーブル)がたくさんある場合、「Models」フォルダを作成し、その中へ移しましょう。
9.このまま実行するとエラーが発生するので、実行時に「不変の名前 ‘System.Data.SQLite’を持つ~~~」エラーが発生する を参考にして、ここでは Program.cs にクラスを追加しておきます。
↓ クラスを追加する
10.次に移行(マイグレーション)のために設定を変更します。ソース(Model1.cs)を開いて、以下のように修正します。
base の中を “name=Model1″ から new SQLiteConnection(@”data source=~~”, false) に変更します。
1 2 3 4 5 |
public Model1() // : base("name=Model1") : base(new SQLiteConnection(@"data source=C:\Users\agrim\source\repos\ConsoleApp1\ConsoleApp1\cti_scs.db"), false) { } |
11.パッケージマネージャーコンソールを開いて、「Enable-Migrations」と入力してEnterキーを押下します。
12.「プロバイダー ‘System.Data.SQLite’ で MigrationSqlGenerator が見つかりませんでした。対象の移行構成クラスで SetSqlGenerator メソッドを使用して、追加の SQL ジェネレーターを登録してください。」とエラーが表示されるので、この時自動生成された「Migrations」フォルダの中の「Configuration.cs」を開いて、以下のように変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
namespace ConsoleApp1.Migrations { using System; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Data.SQLite.EF6.Migrations; using System.Linq; internal sealed class Configuration : DbMigrationsConfiguration<ConsoleApp1.Model1> { public Configuration() { AutomaticMigrationsEnabled = true; SetSqlGenerator("System.Data.SQLite", new SQLiteMigrationSqlGenerator()); } protected override void Seed(ConsoleApp1.Model1 context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. } } } |
13.もう一度、パッケージマネージャーコンソールを開いて、「Enable-Migrations」と入力してEnterキーを押下します。(別にやらなくても良いですが。。)
14.今度は、パッケージマネージャーコンソールで「Add-Migration InitialMigration」と入力してEnterキーを押下します。(ソリューションのMigrationsフォルダ内に日付付きのファイルが追加されます。)
15.続いて、パッケージマネージャーコンソールで「Update-Database」と入力してEnterキーを押下します。(「SQL logic error table “~~~~~” already exists」のエラーが表示されます。)
16.Migrationsフォルダ内へ新しく自動生成されたファイル(ここでは、201906281856037_InitialMigration.cs)を開いて、「public override void Up()」の中をすべてコメントアウトします。
17.もう一度、パッケージマネージャーコンソールで「Update-Database」と入力してEnterキーを押下します。(今度は上手く実行出来ました。)
18.テーブルを見ると、「__MigrationHistory」テーブルが追加されています。
19.サンプルプログラムの実行も問題なく出来ました。