LoginSignup
0
2

More than 3 years have passed since last update.

visualstudiocodeからC#のentityframworkでpostgresqlにアクセスをする

Posted at

はじめに

C#の開発はVisual Studioが定番ですが、個人的に起動の早いVisual Studio Codeを使用しています。Visual Studioが優秀だからか、C#を調べたときに出てくる内容も大抵Visual Studioでした。そこで、Visual Studio CodeでC#の環境作成からEntityFramworkでPostgresにアクセスするまでをまとめました。

環境

  • Windows:10

必要な環境の作成

.NETのインストール

Microsoftの公式ページから.NET Core Runtime と .NET Core SDKのインストールをします。

プロジェクトの生成

  1. プロジェクトを作成したいディレクトリをVSCodeで開く。
  2. VSCode上でCtr + Shift + @ を押し、ターミナルを開く。
  3. ターミナル上でdotnet new console を入力する。

EntityFramwork Coreのインストール

  1. ターミナル上でdotnet add package Npgsql.EntityFrameworkCore.PostgreSQL を入力する。

プログラムの作成

EntityFramworkではテーブルに紐づいたModelクラスとユーザが使用するためのContextクラスを作成して使用します。
Contextクラスは、テーブル結合やサブクエリの結果などユーザの使用する最終的なテーブルの形を定義しています。
Modelクラスは、テーブルと1対1で作成してカラムやキーを定義しています。

Modelクラスの作成

Modelクラスは、[Table(テーブル名)でテーブルとクラスを紐づけて、[Key]で主キー、[Column(カラム名)]でカラムとクラス変数の定義をします。使用方法は、Context経由で使用するためこのクラスは単純なデータクラスとして扱います。

EFMod.cs
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;

namespace DBSample.EF
{
    [Table("pets")]
    public class PetModel
    {
        [Key]
        [Column("id")]
        public int Id {set;get;}
        [Column("name")]
        public string Name{set;get;}
        [Column("age")]
        public int Age{set;get;}
        [Column("birthday")]
        public DateTime Birthday{set;get;}
    }
}

Contextクラスの作成

Contextクラスは、ユーザが直接使用するクラスになります。下の例ではPetsContextがそのクラスになります。
このクラスにクラス変数としてpublic DbSet<Modelクラス名> 変数名 { get; set; }のように定義します。
複数のモデルクラスを定義すると、このContextを通じてテーブル結合などができます。さらに、OnConfiguringではDBの定義やログの定義など設定をします。

EFMod.cs
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;

namespace DBSample.EF
{
    [Table("pets")]
    public class PetModel
    {
        [Key]
        [Column("id")]
        public int Id {set;get;}
        [Column("name")]
        public string Name{set;get;}
        [Column("age")]
        public int Age{set;get;}
        [Column("birthday")]
        public DateTime Birthday{set;get;}
    }

    public class PetsContext: DbContext
    {
        public DbSet<PetModel> PetModels { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseNpgsql("Host=localhost;Port=5431;Username=postgres;Password=postgres;Database=animal_db");
        }
    } 
}

呼び出してDBアクセスをする

DBアクセスをするときは、上で作成したContextクラスのインスタンスを生成するだけでできます。
例では、純粋にselectをした結果を表示しているだけになります。見てわかるように直接使用するのはContextクラスになります。その後、Contextクラスを経由してModelクラスを操作しています。

Program.cs
using System;
using DBSample.EF;

namespace DBSample
{
    class Program
    {
        static void Main(string[] args)
        {
            PetsContext contexts = new PetsContext();

            foreach(var PetModel in contexts.PetModels)
            {
                Console.WriteLine("id:{0}, name:{1}, age:{2}, birthday:{3}", PetModel.Id, PetModel.Name, PetModel.Age, PetModel.Birthday);
            }

            Console.WriteLine("Hello World!");
        }
    }
}

結果

PS C:\DBSample> dotnet run
id:1, name:pochi, age:3, birthday:2019/11/07 21:43:05
id:2, name:tama, age:3, birthday:2019/11/07 21:43:21
id:3, name:wan, age:1, birthday:2019/10/28 21:43:50
id:4, name:mike, age:2, birthday:2019/10/28 21:44:11
Hello World!

デバックできるようにする

dotnetコマンドではデバック実行ができないため、VSCodeでデバックできるようにします。

  1. プロジェクトを作成したいディレクトリをVSCodeで開く。
  2. C#のファイルを開くとC#用Extensionのインストールの案内が出るのでインストールします。
  3. VSCode上でCtr + Shift + D を押し、デバックウィンドウを開く。
  4. デバックでは.NET Core Launch(console) を選択して実行する。

おわりに

EntityFramworkをVSCodeで簡単に使用することができました。EntityFramworkはC#でDBアクセスするメジャーな方法なのでこれからもう少し見ていこうかと思います。なんとなくただのORマッパーではないことは理解していますが、具体的にまとめていけたらと思います。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2