Trong Entity Framework, có hai kiểu thực thể cho phép các nhà phát triển sử dụng các lớp dữ liệu tùy chỉnh của riêng họ cùng với mô hình dữ liệu mà không cần thực hiện bất kỳ sửa đổi nào đối với các lớp dữ liệu.
Chúng ta hãy xem ví dụ sau đây về mô hình dữ liệu thực thể khái niệm.
Để tạo các thực thể POCO cho mô hình thực thể ở trên:
Bước 1: Nhấp chuột phải vào cửa sổ thiết kế. Nó sẽ hiển thị hộp thoại sau.
Bước 2: Chọn mục Add Code Generation Item...
Bước 3: Chọn EF 6.x DbContext Generator, đặt tên và sau đó nhấp vào nút Add.
Bạn sẽ thấy các mẫu POCODemo.Context.tt
và POCODemo.tt
được tạo trong solution explorer.
POCODemo.Context
tạo DbContext
và các bộ đối tượng mà bạn có thể trả về và sử dụng để truy vấn.
Sau đây là mã cho lớp Student được tạo tự động từ mô hình thực thể.
namespace ConsoleApplication1
{
using System;
using System.Collections.Generic;
public partial class Student
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage",
"CA2214:DoNotCallOverridableMethodsInConstructors")]
public Student()
{
this.Enrollments = new HashSet<Enrollment>();
}
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public System.DateTime EnrollmentDate { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage",
"CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
}
Các lớp tương tự cũng được tạo cho các bảng Course và Enrollment từ mô hình thực thể.
Khi tạo các thể hiện của các kiểu thực thể POCO, Entity Framework thường tạo các thể hiện của kiểu dẫn xuất được tạo động, hoạt động như một proxy cho thực thể.
Cũng có thể nói rằng nó là một lớp proxy khi thực thi giống như một lớp bao bọc của thực thể POCO.
Nếu bạn muốn Entity Framework hỗ trợ lazy loading các đối tượng liên quan và theo dõi các thay đổi trong các lớp POCO, thì các lớp POCO phải đáp ứng các yêu cầu sau:
public
.sealed
.abstract
.public
hoặc protected
không có tham số.protected
không có tham số nếu bạn muốn phương thức CreatObject
được sử dụng để tạo proxy cho thực thể POCO.CreatObject
không đảm bảo việc tạo proxy: lớp POCO phải tuân theo các yêu cầu khác được mô tả trong chủ đề này.IEntityWithChangeTracker
hoặc IEntityWithRelationships
vì các lớp proxy thực hiện các interface này.ProxyCreationEnables
phải được thiết lập thành true
.Ví dụ sau đây là của lớp thực thể proxy động.
public partial class Course
{
public Course()
{
this.Enrollments = new HashSet<Enrollment>();
}
public int CourseID { get; set; }
public string Title { get; set; }
public int Credits { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
Để vô hiệu hóa việc tạo các đối tượng proxy, thiết lập giá trị của thuộc tính ProxyCreationEnables
thành false
.
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.
2 kịch bản lưu dữ liệu trong Entity Framework Core là kịch bản được kết nối và kịch bản ngắt kết nối.
Tạo ứng dụng .NET Core Console đầu tiên và cấu hình sử dụng Entity Framework Core.
Truy vấn trong Entity Framework Core có gì mới? Truy vấn trong EF Core khác EF ở những điểm nào.
Entity Framework Core toàn tập sẽ hướng dẫn bạn tất cả mọi thứ về Entity Framework Core.