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.
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.