167

我正在使用Entity Framework 5 code firstASP.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我上面所做的对象?

4

4 回答 4

282

如果包含该库System.Data.Entity,则可以使用该方法的重载,该Include()方法采用 lambda 表达式而不是字符串。然后,您可以Select()使用 Linq 表达式而不是string路径来处理子项。

return DatabaseContext.Applications
     .Include(a => a.Children.Select(c => c.ChildRelationshipType));
于 2012-10-24T11:39:11.937 回答
142

使用 .NET Core 中的 EF Core,您可以使用关键字ThenInclude

return DatabaseContext.Applications
 .Include(a => a.Children).ThenInclude(c => c.ChildRelationshipType);

包括儿童收藏中的儿童:

return DatabaseContext.Applications
 .Include(a => a.Childrens).ThenInclude(cs => cs.ChildRelationshipType1)
 .Include(a => a.Childrens).ThenInclude(cs => cs.ChildRelationshipType2);
于 2017-03-28T16:56:05.267 回答
23

我最终做了以下事情并且它有效:

return DatabaseContext.Applications
     .Include("Children.ChildRelationshipType");
于 2012-10-24T12:42:45.280 回答
1

使用通用存储库模式并为此实现通用解决方案的一个很好的例子可能看起来像这样。

public IList<TEntity> Get<TParamater>(IList<Expression<Func<TEntity, TParamater>>> includeProperties)

{

    foreach (var include in includeProperties)
     {

        query = query.Include(include);
     }

        return query.ToList();
}
于 2016-04-08T17:52:19.920 回答