EF Code-First - Các quy ước trong Code First

Các quy ước trong Code First

Các quy ước là các bộ quy tắc mặc định tự động cấu hình một mô hình khái niệm dựa trên các lớp miền của bạn khi làm việc với cách tiếp cận Code First.

Như bạn đã thấy trong ví dụ ở trên, Entity Framework API đã cấu hình các khóa chính, khóa ngoại, các mối quan hệ, kiểu dữ liệu của cột, v.v. từ các lớp miền mà không cần cấu hình bổ sung.

Điều này là do các quy ước của Entity Framework Code First. Nếu các lớp miền của bạn tuân theo các quy ước thì lược đồ cơ sở dữ liệu sẽ được cấu hình dựa trên các quy ước này.

Các quy ước trong Entity Framework 6.x Code First được định nghĩa trong namespace System.Data.Entity.ModelConfiguration.Conventions .

Bảng sau liệt kê các quy ước mặc định của Code First:

Quy ước Miêu tả
Lược đồ Theo mặc định, EF tạo tất cả các đối tượng DB vào lược đồ dbo .
Tên bảng <Tên lớp thực thể> + 's'
EF sẽ tạo bảng DB với tên lớp thực thể thêm 's' ở cuối, ví dụ: lớp Student sẽ ánh xạ tới bảng Students.
Tên khóa chính 1) Id
2) <Tên lớp thực thể> + "Id" (không phân biệt chữ hoa chữ thường)

EF sẽ tạo cột khóa chính cho thuộc tính có tên Id hoặc <Tên lớp thực thể> + "Id" (không phân biệt chữ hoa chữ thường).
Tên khóa ngoại Theo mặc định, EF sẽ tìm thuộc tính khóa ngoại có cùng tên với tên khóa chính của thực thể chính.
Nếu thuộc tính khóa ngoại không tồn tại, thì EF sẽ tạo cột khóa ngoại trong bảng Db với <Tên thuộc tính điều hướng> + "_" + <Tên thuộc tính khóa chính của thực thể chính>
ví dụ: EF sẽ tạo cột khóa ngoại Grade_GradeId trong bảng Students nếu thực thể Student không chứa thuộc tính khóa ngoại cho Grade.
Cột Null EF tạo một cột null cho tất cả các thuộc tính kiểu tham chiếu và các thuộc tính kiểu nguyên thủy nullable, ví dụ: string, Nullable <int>, Student, Grade (tất cả các thuộc tính kiểu lớp)
Cột Not Null EF tạo các cột Not Null cho các thuộc tính khóa chính và các thuộc tính kiểu giá trị không nullable, ví dụ: int, float, binary, datetime, v.v.
Thứ tự cột EF sẽ tạo các cột theo cùng thứ tự như các thuộc tính trong một lớp thực thể. Tuy nhiên, các cột khóa chính sẽ được di chuyển lên đầu tiên.
Ánh xạ thuộc tính vào DB Theo mặc định, tất cả các thuộc tính sẽ ánh xạ tới cơ sở dữ liệu. Sử dụng thuộc tính [NotMapped] để loại trừ thuộc tính hoặc lớp không ánh xạ vào DB.
Cascade delete Được bật theo mặc định cho tất cả các loại mối quan hệ.

Bảng sau liệt kê kiểu dữ liệu C# được ánh xạ với kiểu dữ liệu SQL Server.

Kiểu dữ liệu C# Ánh xạ tới kiểu dữ liệu SQL Server
int int
string nvarchar(Max)
decimal decimal(18,2)
float real
byte[] varbinary(Max)
datetime datetime
bool bit
byte tinyint
short smallint
long bigint
double float
char Không ánh xạ
sbyte Không ánh xạ (ném ra exception)
object Không ánh xạ

Hình dưới đây minh họa ánh xạ quy ước với cơ sở dữ liệu.

Các quy ước trong Code First


Quy ước về mối quan hệ

Entity Framework 6 tạo mối quan hệ một-nhiều bằng cách sử dụng thuộc tính điều hướng theo quy ước mặc định. Phần này sẽ được trình bày chi tiết trong bài viết khác.

Lưu ý: Entity Framework 6 không có các quy ước mặc định cho các mối quan hệ một-một và nhiều-nhiều. Bạn cần cấu hình chúng bằng Fluent API hoặc DataAnnotation.

Quy ước kiểu phức tạp

Code First tạo kiểu phức tạp cho lớp không bao gồm thuộc tính khóa và khóa chính không được đăng ký bằng thuộc tính DataAnnotation hoặc Fluent API.

Phần này trình bày tổng quan về các quy ước trong Code First. Các quy ước này có thể được ghi đè bằng các sử dụng thuộc tính DataAnnotation hoặc Fluent API.