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.Trong hướng dẫn này, bạn sẽ tìm hiểu cách cấu hình sử dụng attribute, Fluent API để ghi đè các quy ước mặc đình trong Entity Framework Core.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách tạo, sửa đổi và xóa mối quan hệ một - nhiều trong Entity Framework Core.
Trong hướng dẫn này, bạn sẽ tìm hiều về các mối quan hệ một - nhiều, nhiều - nhiều và một - một trong Entity Framework Core.
Trong bài viết này, bạn sẽ tìm hiểu về DbSet trong Entity Framework Core. Cách sử dụng DbSet để thêm, sửa đổi và xóa thực thể trong Entity Framework Core.