7.EF6とSQLiteの新規DBでコードファースト

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 モデル」を選択して、「完了」をクリックします。

8.プロジェクト内に「Model1.cs」が追加されるので、このサンプルソースの中のコメントを2か所外します。

9.ソース(program.cs)を以下のように変更します。

10.SQLite/SQL Server Compact Toolbox を使って、SQLite の空のデータベースを作成します。

「Create…」をクリックします。

プロジェクト内に test.db を保存します。

「Test Connection」のすぐ下のパス「C:\~~~」の内容を後から使うのでコピーしてから、「OK」をクリックします。(※例の場合、コピーする文字列は、C:\Users\agrim\source\repos\ConsoleApp1\ConsoleApp1\test.db です。)

test.db が作成されます。

11.プロジェクトの App.config を開いて、Model1 の connectionString をSQLite の空のデータベースに変更します。

先程、コピーした「C:\~~~」の内容をconnectString=” のところへ貼り付けます。

同じ行の後ろの providerName=” のところも以下のように変更します。

providerName=”System.Data.SQLite”

12.このまま実行するとエラーが発生するので、実行時に「不変の名前 ‘System.Data.SQLite’を持つ~~~」エラーが発生する を参考にして、ここでは Program.cs にクラスを追加しておきます。

↓ クラスを追加する

13.次に移行(マイグレーション)のために設定を変更します。ソース(Model1.cs)を開いて、以下のように修正します。

base の中を “name=Model1″ から new SQLiteConnection(@”data source=~~”, false) に変更します。

 

14.パッケージマネージャーコンソールを開いて、「Enable-Migrations」と入力してEnterキーを押下します。

15.「プロバイダー ‘System.Data.SQLite’ で MigrationSqlGenerator が見つかりませんでした。対象の移行構成クラスで SetSqlGenerator メソッドを使用して、追加の SQL ジェネレーターを登録してください。」とエラーが表示されるので、この時自動生成された「Migrations」フォルダの中の「Configuration.cs」を開いて、以下のように変更します。

 

16.もう一度、パッケージマネージャーコンソールを開いて、「Enable-Migrations」と入力してEnterキーを押下します。(別にやらなくても良いですが。。)

17.今度は、パッケージマネージャーコンソールで「Add-Migration InitialMigration」と入力してEnterキーを押下します。(ソリューションのMigrationsフォルダ内に日付付きのファイルが追加されます。)

18.パッケージマネージャーコンソールで「Update-Database」と入力してEnterキーを押下します。(上手く実行出来ました。)

19.テーブルを見ると、「__MigrationHistory」テーブルが追加されています。

20.プログラムの実行も問題なく出来ました。(MyEntitiesテーブルが自動作成され、データが追加されました。)