Tôi đã sử dụng Khung thực thể để tạo lược đồ cơ sở dữ liệu và tạo mã của mình. Tôi có một bảng gọi là Nhân viên có hồ sơ trẻ em trong một bảng DaysOff. DaysOff có khóa ngoại giao cho Nhân viên và có liên kết 1 đến * trong mô hình của tôi. Tôi chạy một truy vấn LINQ trên bảng Employee và dự kiến rằng đối tượng Domain.Employee của tôi sẽ được điền với DaysOff nhưng DaysOff là null. Khi tôi đi sâu vào Object tôi thấy "employee.DaysOff.Count đã ném một ngoại lệ kiểu System.ObjectDisposedException". Tôi có sai khi nghĩ rằng các hồ sơ trẻ em sẽ được phổ biến? Làm thế nào tôi sẽ làm điều này? Dưới đây là phương pháp tôi gọi để có được nhân viên của tôi:Bản ghi LINQ con null
public static Domain.Employee SelectEmployee(int employeeId)
{
using (var db = new EmployeeEntities())
{
Domain.Employee emp = (from e in db.Employees
where e.EmployeeId == employeeId
select e
).FirstOrDefault();
return emp;
}
}
EDIT: Một sự kết hợp của câu trả lời được chấp nhận dưới đây và các ý kiến (tất cả lên-bình chọn) giúp tôi giải quyết việc này (yay!):
public static Domain.Employee SelectEmployee(int employeeId)
{
using (var db = new EmployeeEntities())
{
Domain.Employee emp = (from e in db.Employees.Include("DaysOff")
where e.EmployeeId == employeeId
select e).FirstOrDefault();
return emp;
}
}
Có. Đây là nguyên lý cơ bản của LINQ được gọi là Lazy Loading/Deferred Execution. Bạn có thể thấy hữu ích khi đọc một số tài liệu (số lượng lớn) ở đó như: http://www.rizalalmashoor.com/blog/linq-to-entities-deferred-execution-and-lazy-loading/ – mellamokb
Xem: http://msdn.microsoft.com/en-us/library/bb896272 – CodingGorilla