もくもくログ
主にIT 関連のメモをもくもくと綴っていきます
最近、Mac でASP.NET Core の開発を始めました。
Mac にはVisual Studio Code しか入っていないので、
コマンドラインで、プロジェクトの作成や
C# のコードからDB 作成しています。
そんな感じで開発をしていますが、
SQLite でコードファーストしようとして、ハマったので、
やり方をメモしたいと思います。
まず、自分の開発環境ですが、下記になります。
OS: Mac
IDE: Visual Studio Code
Framework: .NET Core 1.1, ASP.NET Core
注目点は.NET Core 1.1 を使っていることです。
1.0 の頃と挙動が変わっているので、注意が必要です。
さて、SQLite のコードファーストする方法を記載していきます。
手順は、こんな感じです。
ここで詰まりました……。
結論ですが、.csproj に下記の依存関係を追加する必要がありました。
特に"DotNetCliToolReference" を忘れると、次のステップで使うコマンドが使えません
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
</ItemGroup>
上の依存関係を記述したら、下記のコマンドでパッケージをインストールしてください。
dotnet restore
※Microsoft.EntityFrameworkCore.Design
が無いと、コマンド実行時にエラーになりました。
※DotNetCliToolReference
ですが、NuGet で入れられませんでした(Windows のVisual Studio 2017 で確認しました)
→ NuGet だとPackageReference
として追加しようとしてエラーになっているように見えます
→ Visual Studio 2017 で.csproj
を編集する場合は、プロジェクトを右クリックすると(プロジェクト名).csproj を編集する
というメニューを選択するとXML が表示されます。
テーブルの項目となるクラスと、DbContext を継承したクラスを作成してください。
まず、下記のコマンドを実行し、DB を作成するためのコードを生成します。
dotnet ef migrations add (適当な識別名)
上記のコマンドがうまくいったら、下記のコマンドを実行し、DB を作成します。
dotnet ef database update
あとは、適切な場所で、作成したDB にアクセスするためのコードを実装します。
これで動くはずです。
詳細は、下記のリンクをご覧ください。