Veritabanı şemasını oluşturmak ve kodumu oluşturmak için Entity Framework'ü kullandım. DaysOff tablosunda çocuk kayıtları olan Çalışan isimli bir masa var. DaysOff Çalışan için bir yabancı anahtarı var ve benim modelimde 1 ila * birliği var. Çalışan tablosu üzerinde bir LINQ sorgusu çalıştırdım ve Domain.Employee nesnesinin DaysOff ile doldurulması bekleniyordu, ancak DaysOff boştur. Nesne içinde incelediğimde, "employee.DaysOff.Count, System.ObjectDisposedException türünde bir istisna attı" konusuna bakın. Çocuk kayıtlarının doldurulacağını düşünmek yanlış mıyım? Bunu nasıl yapardım? İşte benim Çalışan almak için çağrı yöntemdir:LINQ çocuk kayıtları sıfır
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;
}
}
DÜZENLEME: aşağıda kabul edilen yanıt ve yorumlar kombinasyonu bana yardımcı (yukarı-olarak tümü) bu (yay!) Çözmek için:
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;
}
}
Evet. Bu, Lazy Yükleme/Ertelenmiş Yürütme olarak adlandırılan LINQ'in temel ilkesidir. Http://www.rizalalmashoor.com/blog/linq-to-entities-deferred-execution-and-lazy-loading gibi bazı (büyük miktarda) belgelerin okunmasını yararlı bulabilirsiniz./ – mellamokb
Bakınız: http://msdn.microsoft.com/en-us/library/bb896272 – CodingGorilla