Я использую Entity Framework 5 code first
и ASP.NET MVC 3
.
Я изо всех сил пытаюсь получить дочерний объект дочернего объекта для заполнения. Ниже мои занятия ..
Класс приложения;
public class Application
{
// Partial list of properties
public virtual ICollection<Child> Children { get; set; }
}
Детский класс:
public class Child
{
// Partial list of properties
public int ChildRelationshipTypeId { get; set; }
public virtual ChildRelationshipType ChildRelationshipType { get; set; }
}
Класс ChildRelationshipType:
public class ChildRelationshipType
{
public int Id { get; set; }
public string Name { get; set; }
}
Часть метода GetAll в хранилище для возврата всех приложений:
return DatabaseContext.Applications
.Include("Children");
Класс Child содержит ссылку на класс ChildRelationshipType. Для работы с детьми приложения у меня было бы что-то вроде этого:
foreach (Child child in application.Children)
{
string childName = child.ChildRelationshipType.Name;
}
Я получаю ошибку здесь, что контекст объекта уже закрыт.
Как мне указать, что каждый дочерний объект должен включать ChildRelationshipType
объект, как я делал выше?
Ответы:
Если вы включите библиотеку,
System.Data.Entity
вы можете использовать перегрузкуInclude()
метода, которая принимает лямбда-выражение вместо строки. Затем вы можете использоватьSelect()
дочерние выражения с выражениями Linq, а неstring
путями.источник
System.Data.Entity;
Microsoft.Data.Entity
С EF Core в .NET Core вы можете использовать ключевое слово
ThenInclude
:Включить детей из детской коллекции:
источник
Я закончил тем, что сделал следующее, и это работает:
источник
Хороший пример использования шаблона Generic Repository и реализации универсального решения для этого может выглядеть примерно так.
источник