Các quy ước là một tập hợp các quy tắc được tích hợp sẵn trong Entity Framework Core chi phối cách mô hình sẽ được ánh xạ tới một lược đồ cơ sở dữ liệu.
Hầu hết thời gian, đặc biệt là với việc phát triển ứng dụng mới, cần tuân theo các quy ước của Entity Framework Core khi phát triển mô hình.
Trong trường hợp không thể thực hiện được, bạn có thể sử dụng các tùy chọn cấu hình của Entity Framework Core.
Nếu một thuộc tính được đặt tên ID
hoặc <entity name>ID
(không phân biệt chữ hoa chữ thường), thì nó sẽ được cấu hình làm khóa chính.
Entity Framework Core sẽ chọn ID
thay vì<entity name>ID
trong trường hợp một lớp chứa cả hai.
Các ví dụ sau minh họa hai phiên bản của thực thể Book trong đó thuộc tính int
tuân theo quy ước:
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
}
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
}
Entity Framework Core sẽ chỉ định rằng các giá trị cột khóa chính được cơ sở dữ liệu tạo tự động.
Quy ước cho khóa ngoại là nó phải có cùng kiểu dữ liệu với thuộc tính khóa chính của thực thể chính và tên phải tuân theo một trong các mẫu sau:
<navigation property name><principal primary key property name>Id
<principal class name><primary key property name>Id
<principal primary key property name>Id
Trong mô hình ví dụ dưới đây, không có thuộc tính khóa ngoại nào được định nghĩa trong thực thể phụ thuộc Book
.
public class Author
{
public int AuthorId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Book> Books { get; set; }
}
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public Author Writer { get; set; }
public string Isbn { get; set; }
}
Theo thứ tự ưu tiên, các tên thuộc tính sau được chấp nhận:
WriterAuthorId
AuthorAuthorId
AuthorId
Tương tự như khóa chính, tên thuộc tính khóa ngoại không phân biệt chữ hoa chữ thường. Entity Framework Core sẽ suy ra số nhiều của một mối quan hệ từ khả năng cho phép null của khóa ngoại. Nếu thuộc tính không cho phép null, mối quan hệ được thiết lập là bắt buộc; nếu không thì nó được thiết lập là tùy chọn.
Nếu bạn chọn không đưa thuộc tính khóa ngoại một cách rõ ràng vào đầu cuối phụ thuộc của mối quan hệ, Entity Framework Core sẽ tạo thuộc tính shadow bằng cách sử dụng mẫu <principal primary key property name>Id
.
Các trường sao lưu được sử dụng để đảm bảo tính đóng gói (encapsulation). Entity Framework Core sẽ ghi và đọc từ chúng nếu có thể. Entity Framework Core sẽ tự động ánh xạ một trường sao lưu nếu tên của nó phù hợp với các mẫu sau:
_<camel-cased property name>
_<property name>
m_<camel-cased property name>
m_<property name>
Thuộc tính Publisher
trong ví dụ sau có một trường ủng hộ có sử dụng mẫu đầu tiên. Thuộc tính RecommendedRetailPrice
có một trường sao lưu phù hợp với mẫu thứ ba:
public class Book
{
private Publisher _publisher;
private decimal m_recommendedRetailPrice;
public int BookId { get; set; }
public string Title { get; set; }
public int PublisherId { get; set; }
public Publisher Publisher
{
get { return _publisher; }
set { _publisher = value; }
}
public decimal RecommendedRetailPrice
{
get { return m_recommendedRetailPrice; }
set { m_recommendedRetailPrice = value; }
}
}
Entity Framework Core sẽ ánh xạ một thực thể vào một bảng có cùng tên với thuộc tính DbSet<TEntity>
tương ứng của nó.
Entity Framework Core cũng sẽ ánh xạ các thực thể không có thuộc tính DbSet<TEntity>
tương ứng nếu thực thể đó tham gia vào mối quan hệ được xác định đầy đủ với các thực thể có thuộc tính DbSet<TEntity>
tương ứng. Entity Framework Core sẽ ánh xạ một thực thể như vậy vào một bảng được đặt tên theo tên lớp.
Trong ví dụ sau, Entity Framework Core sẽ ánh xạ thực thể Book
(có thuộc tính DbSet
trong lớp DbContext
) với một bảng có tên Books
và thực thể Publisher
(không có thuộc tính DbSet
, nhưng tham gia vào mối quan hệ được xác định đầy đủ với Book
) vào một bảng có tên Publisher
:
public class LibraryContext : DbContext
{
public DbSet<Book> Books { get; set; }
}
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public int PublisherId { get; set; }
public Publisher Publisher { get; set; }
}
public class Publisher
{
public int PublisherId { get; set; }
public string Name { get; set; }
public ICollection<Book> Books { get; set; }
}
Entity Framework Core sẽ ánh xạ các đối tượng vào lược đồ dbo
theo mặc định.
Entity Framework Core sẽ ánh xạ các thuộc tính của thực thể thành các cột có cùng tên trong cơ sở dữ liệu.
Thuộc tính kiểu chuỗi có kích thước không giới hạn và được ánh xạ tới kiểu dữ liệu nullable thích hợp do nhà cung cấp cơ sở dữ liệu xác định (ví dụ: nvarchar(MAX)
trong SQL Server).
Tất cả các kiểu dữ liệu khác do nhà cung cấp cơ sở dữ liệu quyết định.
Cách dễ nhất để thiết lập cách các kiểu dữ liệu của .NET được ánh xạ tới một kiểu dữ liệu của cơ sở dữ liệu cụ thể là tạo một mô hình với các thuộc tính bao gồm tất cả các kiểu và sau đó tạo một chuyển đổi (migration) cho mô hình đó.
Ngược lại, bạn có thể tạo một bảng trong cơ sở dữ liệu đích bao gồm tất cả các kiểu dữ liệu của cơ sở dữ liệu, sau đó thiết kế ngược các bảng đó thành một mô hình.
Entity Framework Core sẽ luôn tạo chỉ mục cho khóa ngoại và khóa thay thế.
ID
hoặc <entity name>ID
(không phân biệt chữ hoa chữ thường) sẽ được cấu hình làm khóa chính (primary key).DbSet<TEntity>
tương ứng của nó.dbo
theo mặc định.Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Bài viết này sẽ giúp bạn tìm hiểu về bộ chuyển đổi giá trị - một trong những cải tiến mạnh mẽ của Entity Framework Core 5.
Trong bài viết này, chúng ta sẽ khám phá cách làm việc với các tính năng của Entity Framework Core 5 (EF Core) để thực thi truy vấn SQL thô.
Với EF Core 5, chúng ta có thể thêm view vào trong DbContext và tạo view trong database bằng cách sử dụng cơ chế chuyển đổi cơ sở dữ liệu tích hợp sẵn.
Bài viết này sẽ khám phá các mối quan hệ trong cơ sở dữ liệu quan hệ và cách mô hình hóa các mối quan hệ đó bằng cách tiếp cận Code First trong EF Core.