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 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



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)


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.

Share To:

laptrinhvien

Post A Comment:

0 comments so far,add yours