将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;