2013-07-31 27 views
5

Tôi đang sử dụng EntityFramework lần đầu tiên và có thể câu hỏi này rất đơn giản ... Tôi đã sử dụng phương pháp mã đầu tiên..Tôi có một Nhân viên lớp trông giống như sau:Điền đối tượng khóa ngoài vào khung Entity 4

public class Personnel 
{ 

    public string Id { set; get; } 
    public int Code { set; get; } 
    public string Name { set; get; } 
    public int Type { set; get; } 

    public JobTitle Title { set; get; } 
} 

và lớp JobTitle:

public class JobTitle 
{ 
    public string Id { set; get; } 
    public int Number { set; get; } 
    public string Title { set; get; } 

    public List<Personnel> Personnels { set; get; } 

} 

đó là tài sản cuối cùng trong cán bộ lớp là khóa ngoại trong bảng nhân của vấn đề course..my là khi tôi muốn lấy tất cả nhân viên, (hoặc một nhân viên) từ DB sử dụng biểu thức lambda .. đối tượng khóa ngoài là null .. biểu thức lambda là l ike bên dưới:

Context.ContextInstance.Personnels.ToList(); 

và nếu tôi thay đổi biểu thức thành đối tượng chính ngoài này không còn nữa.

Context.ContextInstance.Personnels.Include("Title").ToList(); 

là đúng cách ?? .. có cách nào tốt hơn không? Tôi cho rằng EF sẽ tự động hiểu rằng !!!! .. nếu có nhiều hơn 1 FK thì tôi phải sử dụng Bao gồm cho tất cả chúng ?? hãy giúp tôi hiểu.

Cảm ơn

+0

bản sao có thể có của [Tắt tải chậm theo mặc định trong Entity Framework 4] (http://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4) –

Trả lời

5

Điều này là do tải chậm. Khi bạn gọi Context.ContextInstance.Personnels.ToList();, thao tác này sẽ tìm nạp tất cả nhân viên nhưng Tiêu đề sẽ không tìm nạp cho đến khi nó được kích hoạt, vì vậy hãy làm cho nó ảo để có được nó.

hay, bạn có thể tắt tải lười biếng bởi

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") { 
    this.Configuration.LazyLoadingEnabled = false; 
} 

Việc làm này sẽ nhận được tất cả dữ liệu liên quan đến từ ngữ cảnh. Sử dụng "bao gồm" đang tải theo yêu cầu, khi bạn chỉ định các thuộc tính bạn muốn truy vấn.

Từ khóa ảo cho phép thời gian chạy khung thực thể tạo proxy động cho các lớp thực thể và thuộc tính của chúng và hỗ trợ tải chậm đó. Nếu không có ảo, tải chậm sẽ không được hỗ trợ, và bạn nhận được null trên thuộc tính sưu tập.

5

Nếu tài sản JobTitle của bạn sẽ được xác định như virtual, bạn sẽ không cần phải sử dụng bao gồm.

Giải thích thực sự tốt ở đây: Entity Framework 4.1 Virtual Properties

Các vấn đề liên quan