ASP.NETコアWebアプリケーションプロジェクトを変換して、Entity FrameworkでPostgreSQLを使用します。
これにより、MacOSまたはLinuxターゲットのVSコードを使用して、ASP.NETコアプロジェクトの開発が可能になります。
このプロジェクトでは、Visual Studio 2022(バージョン17.4)の.NET 7.0 Target Framework、ASP.NETコアWebアプリケーションMVCプロジェクトの足場を使用しています。

プロジェクトのセットアップは、このリポジトリですでに完了しています - 環境のセットアップを保証しています。次に、ソリューションの実行にジャンプします。
このプロジェクトでは、PostgreSQLが必要です - インストール手順を以下に示します。
Visual Studioコードを使用する場合、端末から次のコマンドを発行することにより、ASP.NETコア開発者証明書を生成する必要があります。
dotnet dev-certs https --clean
dotnet dev-certs https
コマンドラインdatabase efコマンドの場合、エンティティフレームワークコアツール.NET CLIをインストールする必要があります。
dotnet tool install --global dotnet-ef
以下に、手順を参照してください。ASP.NETコアプロジェクトでPostgreSQLを使用します。
ASP.NET WebアプリケーションにNpgsql.EntityFrameworkCore.PostgreSQL NUGETパッケージをインストールします。
これを行うには、以下を実行してdotnetコマンドラインを使用できます。
$ dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 3.1.2
または、プロジェクトの.csprojファイルを編集し、 PackageReferenceアイテムグループに次の行を追加します。
< PackageReference Include = " Npgsql.EntityFrameworkCore.PostgreSQL " Version = " 3.1.2 " />プロジェクトのappsettings.jsonで接続文字列を構成し、 username 、 password 、およびdbname適切に置き換えます。
"ConnectionStrings" : {
"DefaultConnection" : " User ID=username;Password=password;Server=localhost;Port=5432;Database=dbname;Integrated Security=true;Pooling=true; "
},Inside Program.cs UseSqlServerオプションをUseNpgsqlに置き換えます。
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseNpgsql ( connectionString ) ) ; ソリューションを実行する前に、エンティティフレームワークの移行を実行してください。
ASP.NETコアテンプレートには、SQL Serverの前世代の移行が伴うため、初期移行が失敗する可能性があります。
移行を実行しようとすると、次のようなエラーが表示される場合があります。
npgsql.postgresexception(0x80004005):42704:「nvarchar」とタイプは存在しません
System.NullReferenceException:オブジェクト参照は、オブジェクトのインスタンスに設定されていません。
system.invalidoperationexception:リレーショナルタイプへのマッピングは、clrタイプ「ブール」を使用して、プロパティ「microsoft.aspnetcore.identity.identityuser.twofactorenabled」にあります。
移行フォルダー全体を削除し、新しい初期の移行を再生します。
ビジュアルスタジオパッケージマネージャーコンソールを使用して新しい移行を生成します(メニューから:ツール - > Nugetパッケージマネージャー - >パッケージマネージャーコンソール):
PM> Add-Migration
または、dotnetCLI経由のコマンドラインから:
$ dotnet ef migrations add Initial
dotnet移行ツールが存在しない場合は、環境セットアップの上記の命令を使用してツールをインストールすることを忘れないでください。
ビジュアルスタジオパッケージマネージャーコンソール(メニューから:ツール - > Nugetパッケージマネージャー - >パッケージマネージャーコンソール)を使用して移行を実行します:
PM> Update-Database
または、dotnetCLI経由のコマンドラインから、 .csprojファイルが配置されているプロジェクトディレクトリ内の次のコマンドを実行します。
$ dotnet ef database update
移行を実行した後、データベースが作成され、Webアプリケーションが実行されます。
HomeBrewを使用してMac上のPostgreSQLサーバーをセットアップする手順を次に示します。
Brewを使用してPostgreSQLをインストールし、サービスを起動します。
$ brew install postgresql
$ brew services start postgresql
ターミナルからcreateuserコマンドを使用してユーザーを作成します。 usernameは目的の新しいユーザー名です。 -P引数を使用して、パスワードのセットアップを求められます。
$ createuser username -P
端末からcreatedbコマンドを使用してデータベースを作成します。ここでは、 dbname目的の新しいデータベース名です。
$ createdb dbname
この時点で、ソリューションのエンティティフレームワークの移行を実行します(手順については上記を参照)。
PostgreSQLインタラクティブ端子を起動し、データベースに接続します。
$ psql dbname
PostgreSQLインターフェイス端子から、 dtコマンドを使用してテーブルをリストします。
dbname=# dt
List of relations
Schema | Name | Type | Owner
--------+-----------------------+-------+--------------
public | AspNetRoleClaims | table | username
public | AspNetRoles | table | username
public | AspNetUserClaims | table | username
public | AspNetUserLogins | table | username
public | AspNetUserRoles | table | username
public | AspNetUserTokens | table | username
public | AspNetUsers | table | username
public | __EFMigrationsHistory | table | username
(8 rows)
データベースの作成中に権限が適切にセットアップされなかった場合、 dbnameデータベース名であり、 usernameが作成したユーザーである特権を付与することにより、遡及的に修正します。
$ psql dbname
dbname=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO username;