Używam Entity Framework 5 code first
i ASP.NET MVC 3
.
Staram się, aby obiekt podrzędny obiektu podrzędnego został wypełniony. Poniżej moje zajęcia ..
Klasa aplikacji;
public class Application
{
// Partial list of properties
public virtual ICollection<Child> Children { get; set; }
}
Klasa dziecka:
public class Child
{
// Partial list of properties
public int ChildRelationshipTypeId { get; set; }
public virtual ChildRelationshipType ChildRelationshipType { get; set; }
}
Klasa ChildRelationshipType:
public class ChildRelationshipType
{
public int Id { get; set; }
public string Name { get; set; }
}
Część metody GetAll w repozytorium, aby zwrócić wszystkie aplikacje:
return DatabaseContext.Applications
.Include("Children");
Klasa Child zawiera odwołanie do klasy ChildRelationshipType. Aby pracować z dziećmi aplikacji, miałbym coś takiego:
foreach (Child child in application.Children)
{
string childName = child.ChildRelationshipType.Name;
}
Otrzymuję tutaj błąd, że kontekst obiektu jest już zamknięty.
Jak określić, że każdy obiekt podrzędny musi zawierać ChildRelationshipType
obiekt, tak jak to zrobiłem powyżej?
Odpowiedzi:
Jeśli włączysz bibliotekę
System.Data.Entity
, możesz użyć przeciążeniaInclude()
metody, która przyjmuje wyrażenie lambda zamiast ciągu. Następnie możeszSelect()
nad dziećmi używać wyrażeń Linq zamiaststring
ścieżek.źródło
System.Data.Entity;
Microsoft.Data.Entity
Z EF Core w .NET Core możesz użyć słowa kluczowego
ThenInclude
:Uwzględnij dzieci z kolekcji dla dzieci:
źródło
W końcu wykonałem następujące czynności i to działa:
źródło
Dobry przykład użycia wzorca Generic Repository i zaimplementowania w tym celu ogólnego rozwiązania może wyglądać mniej więcej tak.
źródło