如何在entity framework中包含子对象的子对象5

Entity Framework 5 code first使用Entity Framework 5 code firstASP.NET MVC 3

我正在努力获取一个子对象的子对象来填充。 以下是我的课程..

应用程序类;

 public class Application { // Partial list of properties public virtual ICollection<Child> Children { get; set; } } 

儿童class:

 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; } 

我在这里得到一个错误,对象上下文已经closures。

我如何指定每个子对象都必须像上面所做的那样包含ChildRelationshipType对象?

如果包含System.Data.Entity库,则可以使用Include()方法的重载,该方法使用lambdaexpression式而不是string。 然后可以使用Linqexpression式而不是stringpath来Select()

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

我最终做了follwoing和它的作品:

 return DatabaseContext.Applications .Include("Children.ChildRelationshipType"); 

使用.NET Core中的EF Core,您可以使用:

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

使用Generic Repository模式并为此实现通用解决scheme的一个很好的例子可能看起来像这样。

 public IList<TEntity> Get<TParamater>(IList<Expression<Func<TEntity, TParamater>>> includeProperties) { foreach (var include in includeProperties) { query = query.Include(include); } return query.ToList(); }