แปลงโครงการแอปพลิเคชันเว็บ ASP.NET Core เพื่อใช้ PostgreSQL ด้วย Entity Framework
สิ่งนี้ช่วยให้การพัฒนาโครงการหลักของ ASP.NET โดยใช้รหัส VS บนเป้าหมาย MACOS หรือ Linux
โครงการนี้ใช้. NET 7.0 Target Framework, ASP.NET Core Web Application MVC Project Scaffold จาก Visual Studio 2022 (เวอร์ชัน 17.4)

การตั้งค่าโครงการเสร็จสมบูรณ์แล้วในพื้นที่เก็บข้อมูลนี้ - รับรองการตั้งค่าสภาพแวดล้อม; จากนั้นข้ามไปเรียกใช้โซลูชัน
โครงการนี้ต้องใช้ PostgreSQL - คำแนะนำการติดตั้งมีให้ด้านล่าง
หากใช้ Visual Studio Code คุณจะต้องสร้างใบรับรอง ASP.NET Core Developer โดยการออกคำสั่งต่อไปนี้จากเทอร์มินัล:
dotnet dev-certs https --clean
dotnet dev-certs https
สำหรับคำสั่ง database ef คุณจะต้องติดตั้งเครื่องมือหลักของ Entity Framework. NET CLI:
dotnet tool install --global dotnet-ef
ด้านล่างคำแนะนำจะถูกอ้างอิงถึงใช้ PostgreSQL ในโครงการหลัก ASP.NET
ติดตั้ง Npgsql.EntityFrameworkCore.PostgreSQL NUGET แพ็คเกจในเว็บแอปพลิเคชัน ASP.NET
ในการทำเช่นนี้คุณสามารถใช้บรรทัดคำสั่ง dotnet โดยการดำเนินการ:
$ dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 3.1.2
หรือแก้ไขไฟล์. csproj ของโครงการและเพิ่มบรรทัดต่อไปนี้ในกลุ่มรายการ PackageReference :
< PackageReference Include = " Npgsql.EntityFrameworkCore.PostgreSQL " Version = " 3.1.2 " /> กำหนดค่าสตริงการเชื่อมต่อใน AppSettings.json ของ Project, แทนที่ 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 ) ) ; ก่อนที่จะสามารถดำเนินการโซลูชันได้ตรวจสอบให้แน่ใจว่าได้เรียกใช้การโยกย้ายเฟรมเวิร์กเอนทิตี
การโยกย้ายครั้งแรกอาจล้มเหลวเนื่องจากเทมเพลต Core ASP.NET มาพร้อมกับการย้ายถิ่นแบบรุ่นก่อนสำหรับ SQL Server
เมื่อพยายามเรียกใช้การโยกย้ายคุณอาจเห็นข้อผิดพลาดเช่น:
npgsql.postgresexception (0x80004005): 42704: พิมพ์ "nvarchar"
System.nullReferenceException: การอ้างอิงวัตถุไม่ได้ตั้งค่าเป็นอินสแตนซ์ของวัตถุ
System.invalidoperationException: ไม่พบการแมปกับประเภทเชิงสัมพันธ์สำหรับคุณสมบัติ 'microsoft.aspnetcore.identity.identityuser.twofactorenabled' ด้วยประเภท CLR 'bool'
ลบโฟลเดอร์การอพยพทั้งหมดและสร้างการอพยพในการอพยพใหม่
สร้างการโยกย้ายใหม่โดยใช้คอนโซล Visual Studio Package Manager (จากเมนู: เครื่องมือ -> Nuget Package Manager -> Package Manager Console):
PM> Add-Migration
หรือจากบรรทัดคำสั่งผ่าน Dotnet CLI:
$ dotnet ef migrations add Initial
หากไม่มีเครื่องมือการโยกย้าย Dotnet อย่าลืมติดตั้งเครื่องมือโดยใช้คำสั่งด้านบนในการตั้งค่าสภาพแวดล้อม
ดำเนินการการโยกย้ายโดยใช้คอนโซลแพ็คเกจ Visual Studio Manager (จากเมนู: เครื่องมือ -> Nuget Package Manager -> Package Manager Console):
PM> Update-Database
หรือจากบรรทัดคำสั่งผ่าน Dotnet CLI ดำเนินการคำสั่งต่อไปนี้ภายในไดเรกทอรีโครงการ โดยที่ไฟล์. csproj อยู่ :
$ dotnet ef database update
หลังจากเรียกใช้การโยกย้ายฐานข้อมูลจะถูกสร้างขึ้นและเว็บแอปพลิเคชันก็พร้อมที่จะเรียกใช้
นี่คือคำแนะนำในการตั้งค่าเซิร์ฟเวอร์ PostgreSQL บน Mac โดยใช้ Homebrew
ใช้ 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;