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インストール済み

動かすまでにやったこと

  1. テンプレートの作成(ターミナルで実行)

    • 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
    • 無事起動すれば準備完了
  2. 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"
      }
      
  3. ModelクラスとDbContextの作成

    • Modelsフォルダを作成
    • Articleクラス(Article.cs)
    • Authorクラス(Author.cs)
    • ArticleContextクラス(ArticleContext.cs)

    ソースはリンク先のとおりなので省略。
    変更した点は、各クラスを別ファイルにしたのと、
    namespaceをnamespace sample1にしたこと。

  4. appsettings.jsonへDB接続情報を記載

     {
         "DbContextSettings" :{
             "ConnectionString" : "User ID=postgresのユーザ;Password=パスワード;Host=localhost;Port=5432;Database=DemoArticlesApp;Pooling=true;"
         }
     }
    
  5. Startup.csへDbContextを追加

    • ConfigureServicesに下記を追加
      もともとservices.AddMvc();の記載があるのでその下に追記

        var connectionString = Configuration["DbContextSettings:ConnectionString"];
        services.AddDbContext<ArticleContext>(
            opts => opts.UseNpgsql(connectionString)
        );
      
  6. migrationの実行

    • sample1フォルダをターミナルで開いて、下記コマンドを実行

        dotnet ef migrations add InitialMigration
        dotnet ef database update
      
  7. migrationが成功しているか確認

    • ターミナルで下記コマンドを実行

        psql DemoArticlesApp -c "SELECT table_name FROM Information_Schema.tables where table_schema='public'"
      
    • 3テーブルが作成されていればOK

        table_name
        -----------------------
         __EFMigrationsHistory
        Authors
        Articles
        (3 rows)
      
  8. Controllerを作成

    • Controllerはyo asp:MvcControllerコマンドで作成

        yo aspnet:MvcController AuthorsController
      
    • AuthorsControllerのソースはリンク先そのままなので省略。(namespaceだけnamespace sample1に変更)

  9. アプリケーション実行

    • ターミナルからdotnet run
    • Chrome拡張機能のPostmanを使って動作確認

      • POSTするときにデータフォーマットはrawにして、JSON(application/json)にする
    • ブラウザのアドレスバーにhttp://localhost:5000/api/authors/1を入れて、POSTで登録したデータが取得できるか確認。

最後に

かなりざっくりだけれど、これでapi叩いて追加、参照はできるようになりました。
asp.net MVCもEntity Frameworkもわからない状態で始めたので、
試行錯誤を繰り返して動かすまでかなり大変でした。

ようやく動かせるようになったので、内容はこれから理解していきます。