將ASP.NET Core Web應用程序項目轉換為將PostgreSQL與實體框架一起使用。
這可以使用MACOS或Linux目標上的VS代碼來開發ASP.NET核心項目。
該項目使用.NET 7.0目標框架,ASP.NET Core Web應用程序MVC項目支架2022(版本17.4)。

項目設置已經在此存儲庫中完成 - Assure Environment設置;然後,跳到運行解決方案。
該項目需要後Gresql-下面提供了安裝說明。
如果使用Visual Studio代碼,則需要通過從終端發出以下命令來生成ASP.NET Core開發人員證書:
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 " />在Project的AppSettings.json中配置連接字符串,適當地替換username , password和dbname :
"ConnectionStrings" : {
"DefaultConnection" : " User ID=username;Password=password;Server=localhost;Port=5432;Database=dbname;Integrated Security=true;Pooling=true; "
},內部program.cs用UseNpgsql替換UseSqlServer選項:
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseNpgsql ( connectionString ) ) ; 在執行解決方案之前,請確保運行實體框架遷移。
由於ASP.NET核心模板,初始遷移可能會失敗,並帶有SQL Server的生成前遷移。
試圖運行遷移時,您可能會看到以下錯誤:
npgsql.postgresexception(0x80004005):42704:類型“ nvarchar”不存在
System.NullReferenceException:對象引用未設置為對象的實例。
system.invalidoperationException:對於clr類型“ bool”,屬性“ microsoft.aspnetcore.identity.sideityuser.twofactorenabled”都找不到與關係類型的映射。
刪除整個遷移文件夾,並再生新的Inital遷移。
使用Visual Studio Package Manager控制台生成新的遷移(菜單:工具 - > Nuget package Manager->軟件包管理器控制台):
PM> Add-Migration
或者,通過dotnet cli從命令行中:
$ dotnet ef migrations add Initial
如果不存在dotnet遷移工具,請記住使用環境設置中上面的指令安裝工具。
使用任何一個Visual Studio Package Manager控制台執行遷移(菜單:工具 - > Nuget package Manager->軟件包管理器控制台):
PM> Update-Database
或者,從命令行通過dotnet cli,在項目目錄中執行以下命令,其中.csproj文件位於其中:
$ dotnet ef database update
運行遷移後,創建數據庫,並準備運行Web應用程序。
以下是使用HomeBrows在Mac上設置PostgreSQL Server的說明。
使用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;