如何在entity framework中包含子对象的子对象5
我Entity Framework 5 code first
使用Entity Framework 5 code first
和ASP.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式而不是string
path来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(); }
- 如何在Microsoft.AspNet.Identity.EntityFramework.IdentityUser中更改id的types
- 如何将TimeSpan超过24小时映射到SQL Server Code First?
- EF Code First:如何从nuget包控制台中看到“EntityValidationErrors”属性?
- “LINQexpression式节点types”调用“不支持LINQ to Entities” – 难住!
- entity framework代码来自同一个表的前两个外键
- 非静态方法需要一个目标
- EF Code First中的小数精度和小数位
- entity framework提供程序types无法加载?
- 关于DbSet和DbContext