Tải Tích Cực, Lười Tải và Tải Minh Bạch trong Entity Framwork.
(Local, Eager Loading, Lazy Loading, Explicit Loading)
2. Tải Tích Cực (Eager Loading)
khi chạy chuyển mã qua truy vấn SQL
Khi bạn sử dụng truy vấn tích cực (háo hức) có thể truy vấn các Entity liên quan nói cách khác ta có thể tải các table liên quan (khóa ngoại). Ta sử dụng từ khóa Include trong truy vấn này.
Ví dụ:
Bạn thấy khóa chính và khóa ngoại (standardId)
using (var ctx = new SchoolDBEntities())
{
stud = ctx.Students.Include("Standard")
.Where(s => s.StudentName == "Student1").FirstOrDefault<Student>();
}
khi chạy chuyển mã qua truy vấn SQL
SELECT TOP (1)
[Extent1].[StudentID] AS [StudentID],
[Extent1].[StudentName] AS [StudentName],
[Extent2].[StandardId] AS [StandardId],
[Extent2].[StandardName] AS [StandardName],
[Extent2].[Description] AS [Description]
FROM [dbo].[Student] AS [Extent1]
LEFT OUTER JOIN [dbo].[Standard] AS [Extent2] ON [Extent1].[StandardId] = [Extent2].[StandardId]
WHERE 'Student1' = [Extent1].[StudentName]
3. Lười Tải (Lazy Loading)
Mặc định trong Entity Framework là lười tải là nó không tải các dữ liệu liên quan, trừ khi ta có yêu cầu.
Tuy nhiên ta có thể tắt chế độ này hoặc tắt cho tất cả entity
Mặc định trong Entity Framework là lười tải là nó không tải các dữ liệu liên quan, trừ khi ta có yêu cầu.
Tuy nhiên ta có thể tắt chế độ này hoặc tắt cho tất cả entity
using (var ctx = new SchoolDBEntities())
{
this.ctx.Configuration.LazyLoadingEnabled = false;
.....................................
}
cho tất cả entity public SchoolDBEntities(): base("name=SchoolDBEntities")
{
this.Configuration.LazyLoadingEnabled = false;
}
4. Tải Minh Bạch (Explicit Loading)
Các bạn neecso thể sử dụng các phướng thức tải trên trong ứng dụng của mình.
khi các bạn tắt chế độ lười tải nhưng vẫn chưa thể tải các entity liên quan bạn có thể sử dụng từ khóa Reference() để gọi entity rõ ràng hơn
using (var context = new SchoolDBEntities())
{
//Disable Lazy loading
context.Configuration.LazyLoadingEnabled = false;
var student = (from s in context.Students
where s.StudentName == "Bill"
select s).FirstOrDefault<Student>();
context.Entry(student).Reference(s => s.Standard).Load();
}
Các bạn neecso thể sử dụng các phướng thức tải trên trong ứng dụng của mình.
Post A Comment:
0 comments so far,add yours