Saya menggunakan Entity Framework 5 code first
dan ASP.NET MVC 3
.
Saya berjuang untuk mendapatkan objek anak dari objek anak untuk diisi. Di bawah ini adalah kelasku ..
Kelas aplikasi;
public class Application
{
// Partial list of properties
public virtual ICollection<Child> Children { get; set; }
}
Kelas anak:
public class Child
{
// Partial list of properties
public int ChildRelationshipTypeId { get; set; }
public virtual ChildRelationshipType ChildRelationshipType { get; set; }
}
Kelas ChildRelationshipType:
public class ChildRelationshipType
{
public int Id { get; set; }
public string Name { get; set; }
}
Bagian dari metode GetAll di repositori untuk mengembalikan semua aplikasi:
return DatabaseContext.Applications
.Include("Children");
Kelas Anak berisi referensi ke kelas ChildRelationshipType. Untuk bekerja dengan anak-anak aplikasi, saya akan memiliki sesuatu seperti ini:
foreach (Child child in application.Children)
{
string childName = child.ChildRelationshipType.Name;
}
Saya mendapatkan kesalahan di sini bahwa konteks objek sudah ditutup.
Bagaimana cara menentukan bahwa setiap objek anak harus menyertakan ChildRelationshipType
objek seperti yang saya lakukan di atas?
Jawaban:
Jika Anda menyertakan pustaka,
System.Data.Entity
Anda bisa menggunakan metode overloadInclude()
yang mengambil ekspresi lambda alih-alih string. Anda kemudian dapat menggantiSelect()
anak dengan ekspresi Linq daripadastring
jalur.return DatabaseContext.Applications .Include(a => a.Children.Select(c => c.ChildRelationshipType));
sumber
System.Data.Entity;
Microsoft.Data.Entity
Dengan EF Core di .NET Core Anda dapat menggunakan kata kunci
ThenInclude
:return DatabaseContext.Applications .Include(a => a.Children).ThenInclude(c => c.ChildRelationshipType);
Sertakan anak-anak dari koleksi anak-anak:
return DatabaseContext.Applications .Include(a => a.Childrens).ThenInclude(cs => cs.ChildRelationshipType1) .Include(a => a.Childrens).ThenInclude(cs => cs.ChildRelationshipType2);
sumber
Saya akhirnya melakukan hal berikut dan berhasil:
return DatabaseContext.Applications .Include("Children.ChildRelationshipType");
sumber
Contoh yang baik dalam menggunakan pola Repositori Generik dan mengimplementasikan solusi umum untuk ini mungkin terlihat seperti ini.
public IList<TEntity> Get<TParamater>(IList<Expression<Func<TEntity, TParamater>>> includeProperties) { foreach (var include in includeProperties) { query = query.Include(include); } return query.ToList(); }
sumber