Tài liệu & Hướng dẫn chuyên sâu: Chuyển C# EF Core Entity sang PostgreSQL DDL (EF Core to PostgreSQL)
1. Tổng quan & Nguyên lý hoạt động
Entity Framework Core (EF Core) là ORM hàng đầu trong hệ sinh thái .NET hiện đại. Khi phát triển ứng dụng Microservices hoặc thiết kế kiến trúc Database-First với PostgreSQL (thông qua provider Npgsql.EntityFrameworkCore.PostgreSQL), việc tạo thủ công các tệp Migration hoặc chạy `dotnet ef migrations script` thường tốn nhiều thời gian và yêu cầu toàn bộ project .NET phải compile thành công cùng chuỗi kết nối database. Công cụ C# EF Core to PostgreSQL DDL của Verdbench cho phép lập trình viên dán trực tiếp mã nguồn các lớp C# POCO Entity có chứa các Data Annotations phổ biến và tức thì chuyển đổi thành các câu lệnh SQL DDL `CREATE TABLE`, `CREATE INDEX`, `FOREIGN KEY` chuẩn mực của PostgreSQL. Mọi tác vụ phân tích cú pháp AST và Regex diễn ra 100% tại bộ nhớ RAM trình duyệt mà không gửi bất kỳ dòng mã nào lên máy chủ bên ngoài.
2. Ưu thế kiến trúc & Tính năng nổi bật
Hỗ trợ trọn vẹn kiểu số nguyên (int, long, short), số thực chính xác cao (decimal numeric), chuỗi (TEXT, VARCHAR), ngày giờ (DateTime, DateTimeOffset với TIMESTAMPTZ), UUID, mảng native (text[], int[]) và kiểu JSONB.
Tự động nhận diện thuộc tính [Table], [Key], [Required], [MaxLength], [StringLength], [Column], [Precision], [Index], [ForeignKey], [Comment] và [NotMapped]. Nhận biết thuộc tính Navigation (ICollection, List, virtual) để loại bỏ khỏi danh sách cột.
Chuyển đổi quy ước đặt tên PascalCase của C# sang snake_case chuẩn PostgreSQL, hỗ trợ sinh cú pháp IDENTITY (SQL:2003) hoặc SERIAL, tự động gán giá trị mặc định CURRENT_TIMESTAMP và gen_random_uuid().
3. Bảng đối chiếu kiểu dữ liệu C# EF Core và PostgreSQL DDL
Quy tắc chuyển đổi kiểu dữ liệu và thuộc tính Data Annotation phổ biến từ C# sang PostgreSQL:
| C# POCO / Data Annotation | Kiểu & Thuộc tính PostgreSQL | Quy tắc & Hành vi xử lý |
|---|---|---|
| string (mặc định) | TEXT | PostgreSQL xử lý TEXT tối ưu như VARCHAR mà không giới hạn độ dài cố định. |
| [MaxLength(N)] / [StringLength(N)] | VARCHAR(N) | Giới hạn số ký tự tối đa N cho các trường dữ liệu ngắn như mã code, slug, số điện thoại. |
| [Key] int Id | INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY | Chuẩn SQL:2003 hiện đại của PostgreSQL 10+ thay thế dần cho chuỗi SERIAL cổ điển. |
| Guid Id = Guid.NewGuid() | UUID PRIMARY KEY DEFAULT gen_random_uuid() | Khóa chính định danh duy nhất toàn cầu, tự động sinh khóa ngẫu nhiên trên database engine. |
| decimal Price / [Precision(18, 2)] | NUMERIC(18, 2) | Độ chính xác tuyệt đối cho dữ liệu tài chính kế toán, triệt tiêu sai số làm tròn số học. |
| DateTime / DateTimeOffset | TIMESTAMPTZ | TIMESTAMP WITH TIME ZONE lưu trữ thời điểm chuẩn UTC, bảo đảm không sai lệch múi giờ. |
| [Column(TypeName = 'jsonb')] | JSONB | Định dạng tài liệu JSON nhị phân hỗ trợ lập chỉ mục GIN và truy vấn trường lồng nhau siêu tốc. |
| string[] Tags / int[] Codes | TEXT[] / INTEGER[] | Kiểu mảng nguyên bản của PostgreSQL giúp đơn giản hóa bảng phụ khi lưu danh sách tag. |
| [ForeignKey('Parent')] int ParentId | CONSTRAINT fk_... FOREIGN KEY REFERENCES ... | Thiết lập ràng buộc toàn vẹn khóa ngoại kèm tùy chọn ON DELETE CASCADE/RESTRICT. |
| [NotMapped] / ICollection<T> | (Bị bỏ qua) | Thuộc tính getter tính toán hoặc quan hệ điều hướng navigation được tự động lọc bỏ. |
4. Câu hỏi thường gặp (FAQ)
Giải đáp các thắc mắc phổ biến của lập trình viên khi sử dụng tiện ích Chuyển C# EF Core Entity sang PostgreSQL DDL (EF Core to PostgreSQL).
5. Công cụ liên quan
- Trực quan hóa PostgreSQL EXPLAINPhân tích kế hoạch thực thi EXPLAIN (JSON/Text) của PostgreSQL, vẽ sơ đồ cây phân cấp, cảnh báo điểm nghẽn và đưa ra gợi ý tối ưu hóa chỉ mục.
- Máy tính Lưu trữ Primary Key & B-TreeSo sánh dung lượng đĩa, độ sâu B-Tree và nguy cơ phân mảnh Page Splitting giữa BIGINT, UUID v7, ULID và UUID v4 trên PostgreSQL và MySQL InnoDB.
- Chuyển JSON sang CodeSinh kiểu dữ liệu TypeScript, C#, Java, Dart từ JSON.
- Định dạng SQLLàm đẹp hoặc nén câu lệnh SQL cho nhiều hệ quản trị CSDL