PostgreSQLへASP.NET CoreとEntity Frameworkでアクセスしてみる
asp.net MVCを使えるようになりたいと思い少し触ってみました。
asp.netは仕事でWebFormを使ったことがあるだけです。
自宅にはmacしかないので、.net coreを選択したのですが、かなりハマりました。
このエントリーを見つけたおかげで、
なんとか動かすところまではできたのでそのメモです。
前提
- .Net Coreがインストール済み
- Visual Studio Codeがインストール済み
- PostgreSQLがインストール済み
- node、npm、yeome、generator-aspnetインストール済み
動かすまでにやったこと
テンプレートの作成(ターミナルで実行)
yo aspnet
コマンドを実行Web Application Basic [without Membership and Authorization]
を選択- プロジェクトの名前を入力。(今回はsample1を入力)
プロジェクトが作成されたら、下記コマンドを入力するように出るので、その通りにコマンドを実行
cd "sample1" dotnet restore dotnet build dotnet run
dotnet runが成功するとURLが表示されるので、ブラウザでそのURLへアクセス
http://localhost:5000
- 無事起動すれば準備完了
project.jsonへEntityFrameworkを追加
dependencies
へ下記を追加"Npgsql.EntityFrameworkCore.PostgreSQL": "1.0.0" "Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final"
tools
へ下記を追加"Microsoft.EntityFrameworkCore.Tools": { "version": "1.0.0-preview2-final", "imports": "portable-net45+win8+dnxcore50" }
ModelクラスとDbContextの作成
- Modelsフォルダを作成
- Articleクラス(Article.cs)
- Authorクラス(Author.cs)
- ArticleContextクラス(ArticleContext.cs)
ソースはリンク先のとおりなので省略。
変更した点は、各クラスを別ファイルにしたのと、
namespaceをnamespace sample1
にしたこと。appsettings.jsonへDB接続情報を記載
{ "DbContextSettings" :{ "ConnectionString" : "User ID=postgresのユーザ;Password=パスワード;Host=localhost;Port=5432;Database=DemoArticlesApp;Pooling=true;" } }
Startup.csへDbContextを追加
ConfigureServicesに下記を追加
もともとservices.AddMvc();
の記載があるのでその下に追記var connectionString = Configuration["DbContextSettings:ConnectionString"]; services.AddDbContext<ArticleContext>( opts => opts.UseNpgsql(connectionString) );
migrationの実行
sample1フォルダをターミナルで開いて、下記コマンドを実行
dotnet ef migrations add InitialMigration dotnet ef database update
migrationが成功しているか確認
ターミナルで下記コマンドを実行
psql DemoArticlesApp -c "SELECT table_name FROM Information_Schema.tables where table_schema='public'"
3テーブルが作成されていればOK
table_name ----------------------- __EFMigrationsHistory Authors Articles (3 rows)
Controllerを作成
Controllerは
yo asp:MvcController
コマンドで作成yo aspnet:MvcController AuthorsController
AuthorsControllerのソースはリンク先そのままなので省略。(namespaceだけ
namespace sample1
に変更)
アプリケーション実行
最後に
かなりざっくりだけれど、これでapi叩いて追加、参照はできるようになりました。
asp.net MVCもEntity Frameworkもわからない状態で始めたので、
試行錯誤を繰り返して動かすまでかなり大変でした。
ようやく動かせるようになったので、内容はこれから理解していきます。