EF Code-First - Tạo các quy ước tùy chỉnh
Tạo các quy ước tùy chỉnh trong Code First
Bạn đã tìm hiểu về các quy ước trong Code First trong phần đầu của bài viết. EF 6 cũng cung cấp khả năng định nghĩa các quy ước tùy chỉnh của riêng bạn.
Có hai loại quy ước chính: Quy ước cấu hình và Quy ước mô hình.
Quy ước cấu hình
Quy ước cấu hình là một cách để cấu hình các thực thể mà không ghi đè cấu hình mặc định được cung cấp trong Fluent API.
Bạn có thể định nghĩa một quy ước cấu hình trong phương thức OnModelCreating()
và cả trong lớp tùy chỉnh, tương tự như cách bạn sẽ định nghĩa ánh xạ thực thể thông thường với Fluent API.
Ví dụ: bạn muốn cấu hình một thuộc tính làm thuộc tính khóa có tên khớp với {tên thực thể}_ID, ví dụ: thuộc tính Student_ID
của thực thể Student
sẽ là khóa chính. Sau đây định nghĩa quy ước này.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder
.Properties()
.Where(p => p.Name == p.DeclaringType.Name + "_ID")
.Configure(p => p.IsKey());
base.OnModelCreating(modelBuilder);
}
Theo cùng một cách, bạn có thể định nghĩa quy ước cho kích thước của kiểu dữ liệu.
Ví dụ dưới đây định nghĩa một quy ước cho các thuộc tính chuỗi. Nó sẽ tạo các cột nvarchar
có kích thước 50 trong SQL Server cho tất cả các thuộc tính kiểu chuỗi của một thực thể.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder
.Properties()
.Where(p => p.PropertyType.Name == "String")
.Configure(p => p.HasMaxLength(50));
base.OnModelCreating(modelBuilder);
}
Bạn cũng có thể định nghĩa một lớp tùy chỉnh cho quy ước này bằng cách kế thừa lớp Convention
, như ví dụ bên dưới:
public class PKConvention : Convention
{
public PKConvention()
{
this.Properties()
.Where(p => p.Name == p.DeclaringType.Name + "_ID")
.Configure(p => p.IsKey());
}
}
Sau khi tạo lớp quy ước tùy chỉnh, hãy thêm nó vào các quy ước như dưới đây:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add<PKConvention>();
}
Quy ước mô hình
Quy ước mô hình dựa trên siêu dữ liệu mô hình cơ bản. Có các quy ước cho cả CSDL và SSDL.
Tạo một lớp triển khai interface IConceptualModelConvention
từ các quy ước CSDL và IStoreModelConvention
từ các quy ước SSDL.
Truy cập Quy ước tùy chỉnh trong EF 6 để biết thêm thông tin.