Tôi đang sử dụng Mô hình EF đầu tiên với các thực thể POCO và với DbContexts tùy chỉnh. Vấn đề của tôi là thiết lập LazyLoadingEnabled=false
không ảnh hưởng đến bất cứ điều gì, các thuộc tính điều hướng vẫn được tải. Dưới đây là ví dụ của tôi được đơn giản hóa.Cài đặt LazyLoadingEnabled dường như không hoạt động trong EF 5
Chương trình thực thể. Một chương trình có thể tham gia các chương trình khác:
namespace Domain.Entities
{
using System;
using System.Collections.Generic;
public partial class Program
{
public Program()
{
this.Programs = new HashSet<Program>();
}
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public System.DateTime StartDate { get; set; }
public System.DateTime EndDate { get; set; }
public Nullable<int> ProgramId { get; set; }
public virtual ICollection<Program> Programs { get; set; }
public virtual Program OwnerProgram { get; set; }
}
}
Các DbContext:
namespace Infrastructure.Model
{
public class ProgramContext : DbContext
{
public ProgramContext()
: base("name=MyContainer")
{
Configuration.LazyLoadingEnabled = false;
}
public DbSet<Program> Programs { get; set; }
}
}
Sau đây là cách tôi sử dụng nó:
private ProgramContext _dbContext = new ProgramContext();
// GET api/program
public IEnumerable<Program> GetPrograms()
{
List<Program> list = _dbContext.Programs.ToList();
return list;
}
Với ví dụ trên, EF vẫn tải các chương trình và thuộc tính OwnerProgram của lớp Program. Tôi đã thử xóa các từ khóa ảo, vô hiệu hóa việc tạo proxy và cũng đã xác minh rằng LazyLoadingEnabled=false
trên chính Mô hình.
Tôi có thiếu gì đó không?
Cảm ơn bạn, đây là những gì tôi thấy. Có cách nào tôi có thể làm cho EF không tải thuộc tính điều hướng trừ khi tôi đang sử dụng .Bao gồm()? – gixen
@gixen: Như đã nói, nó không thực sự "tải". Sửa lỗi mối quan hệ chỉ cần đặt các thực thể vào các bộ sưu tập dẫn hướng và các tham chiếu đã được tải anyway. Vì vậy, không có phí truy vấn. Nếu bạn muốn sửa đổi các thực thể sau khi tải, bạn cần theo dõi thay đổi và bạn không thể tắt hành vi này. Nếu không theo dõi thay đổi trong các tình huống chỉ đọc, bạn có thể thử '_dbContext.Programs.AsNoTracking(). ToList()'. Nhưng tôi không chắc chắn nếu nó sẽ giúp đỡ trong trường hợp này. – Slauma
Những gì tôi nhận được từ câu trả lời này là không có cách nào để tải toàn bộ đồ thị đối tượng trong EF mà không có bối cảnh mở cho các thuộc tính điều hướng tải lười. OR .Include ("NavigationProtperyName") có thể được gọi một cách rõ ràng để tải thuộc tính Điều hướng, nhưng nó được yêu cầu trên mỗi truy vấn. –