この記事のコードは .NET 10(C# 14)で動作を確認した内容です。接続情報(ホスト・ユーザー・パスワード)はご自身の環境に置き換えてください。パッケージのバージョンで書き方が変わることがあるので、最新は各公式ドキュメントも確認してください。
これまでの記事では SQLite を使ってきました。手軽で開発には最適ですが、本格的なアプリでは PostgreSQL や MySQL といった本格的なデータベースを使う場面が増えます。
うれしいのは、C#側のコードはほとんど変わらないことです。接続する「ドライバー(プロバイダー)」を差し替えるだけで、Dapper も EF Core もそのまま使えます。この記事では、その差し替え方を見ていきます。
PostgreSQL に接続する(Npgsql)
C#からPostgreSQLを扱う定番ライブラリが Npgsql です。まずパッケージを入れます。
dotnet add package Npgsql接続文字列で、ホスト・ポート・ユーザー・パスワード・データベース名を指定します。あとは NpgsqlConnection を開くだけ。接続オブジェクトが違うだけで、Dapperの使い方は SQLite のときと完全に同じです。
using Npgsql;
using Dapper;
var connString = "Host=localhost;Port=5432;Username=postgres;Password=yourpass;Database=sampledb";
using var conn = new NpgsqlConnection(connString);
conn.Open();
// Dapper はそのまま使える
var books = conn.Query<Book>("SELECT * FROM book ORDER BY title");
foreach (var b in books)
Console.WriteLine($"{b.Id}: {b.Title}");EF Core で使う場合は、SQLite用の代わりに PostgreSQL 用プロバイダーを入れて、UseNpgsql を呼ぶだけです。
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQLprotected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseNpgsql("Host=localhost;Port=5432;Username=postgres;Password=yourpass;Database=sampledb");MySQL に接続する(MySqlConnector)
MySQL(や MariaDB)には、モダンで非同期対応の MySqlConnector がおすすめです。Oracle純正の MySql.Data もありますが、パフォーマンスと非同期対応で MySqlConnector を選ぶ人が増えています。
dotnet add package MySqlConnector使い方はやはり同じで、MySqlConnection を開いて Dapper に渡すだけです。
using MySqlConnector;
using Dapper;
var connString = "Server=localhost;Port=3306;User ID=root;Password=yourpass;Database=sampledb";
using var conn = new MySqlConnection(connString);
conn.Open();
var books = conn.Query<Book>("SELECT * FROM book ORDER BY title");
foreach (var b in books)
Console.WriteLine($"{b.Id}: {b.Title}");EF Core で使う場合は、Pomelo.EntityFrameworkCore.MySql プロバイダーを入れて UseMySql を呼びます(サーバーのバージョン指定が必要です)。
dotnet add package Pomelo.EntityFrameworkCore.MySqlprotected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseMySql(
"Server=localhost;Port=3306;User ID=root;Password=yourpass;Database=sampledb",
new MySqlServerVersion(new Version(8, 0, 36)));接続文字列の扱いには注意
サンプルではパスワードを直接書いていますが、本番のコードに接続文字列(特にパスワード)を直書きしないのが鉄則です。appsettings.json や環境変数、開発中は User Secrets などに逃がして、ソースコードやGitに乗せないようにしましょう。
DBサーバーはどこに置く?
開発中は自分のPC(localhost)で十分ですが、公開するアプリでは PostgreSQL や MySQL をサーバー上で動かすことになります。手頃なのがVPSです。Ubuntu のVPSを1台用意すれば、そこにDBサーバーを立てて、C#アプリから接続できます。
VPSの初期設定は、別記事にまとめています。DBを外部公開するときは、ファイアウォール(ufw)やアクセス制限をきちんとかけてから使ってください。
👉 参考:Ubuntu 26.04 LTSのインストールと初期設定|VPSで最初にやること
まとめ
C#のDBアクセスは、接続プロバイダーを差し替えるだけで、SQLiteでもPostgreSQLでもMySQLでも同じように書けるのが強みです。
- PostgreSQL → Npgsql(EF Coreは
Npgsql.EntityFrameworkCore.PostgreSQL) - MySQL → MySqlConnector(EF Coreは
Pomelo.EntityFrameworkCore.MySql) - Dapper / EF Core のコード本体はほぼ変わらない
- 接続文字列は直書きせず、設定ファイルや環境変数へ
どのORM・どのDBを選ぶかの全体像は、次の使い分けガイドで整理しています。
👉 あわせて読みたい:C#でデータベースを扱う完全ガイド(ADO.NET・Dapper・EF Core・SqlKataの使い分け)

コメント