C# EF Core Entity sang PostgreSQL DDL

Chuyển đổi các lớp C# POCO Entity Framework Core thành câu lệnh SQL CREATE TABLE cho PostgreSQL với kiểu dữ liệu, khóa chính, khóa ngoại và chỉ mục chính xác.

Entity.csC# EF Core
PostgreSQL DDLSQL

Dán lớp C# Entity vào khung bên trái để sinh câu lệnh PostgreSQL CREATE TABLE.

Nhóm Dữ liệu (Data)•Tài liệu kỹ thuật & Đặc tả RFC

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

Ánh xạ kiểu dữ liệu C# sang PostgreSQL chuẩn

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.

Phân tích cú pháp Data Annotations & Conventions

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.

Tự động hóa chuẩn quy ước PostgreSQL (snake_case)

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 AnnotationKiểu & Thuộc tính PostgreSQLQuy tắc & Hành vi xử lý
string (mặc định)TEXTPostgreSQL 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 IdINTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEYChuẩ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 / DateTimeOffsetTIMESTAMPTZTIMESTAMP 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[] CodesTEXT[] / 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 ParentIdCONSTRAINT 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).

Trong PostgreSQL, tất cả tên bảng và tên cột không đặt trong dấu ngoặc kép đều được coi là chữ thường (lowercase). Nếu bạn giữ nguyên PascalCase (ví dụ: 'CreatedAt') mà không có ngoặc kép, PostgreSQL sẽ tự động chuyển thành 'createdat', khiến việc đọc mã SQL trở nên rất khó khăn. Nếu đặt ngoặc kép '"CreatedAt"', bạn sẽ buộc phải gõ chính xác cả dấu ngoặc kép lẫn chữ hoa chữ thường trong mọi câu truy vấn sau này. Do đó, chuyển đổi sang 'snake_case' (ví dụ: 'created_at') là quy chuẩn vàng và được cộng đồng PostgreSQL khuyến nghị sử dụng rộng rãi.