我正在尝试使用EF执行以下操作,但不确定是否可行。 我有一个带有多个子实体的实体。 因为必须在多个查询中包括所有这些实体,所以我使用了这种扩展方法:

public static IQueryable<Model.CourseRegistration> DefaultInclude(this IQueryable<Model.CourseRegistration> cr)
{
  return cr.Include(r => r.Course)
           .Include(r => r.Course.CourseDescription)
           .Include(r => r.Course.CourseType)
           .Include(r => r.Course.Department)
           .Include(r => r.Course.Teacher)
           .Include(r => r.Student)
           .Include(r => r.Results);
}

使用此方法,我可以执行db.CourseRegistrations.DefaultInclude().ToList() ,它可以完美运行。 现在,我还有另一个实体,在CourseRegistration的集合中包含导航属性。 为了渴望加载所有子实体,我使用以下扩展名:

public static IQueryable<Model.Student> DefaultInclude(this IQueryable<Model.Student> cr)
{
    return cr.Include(r => r.Courses.Select(s => s.Results))
             .Include(r => r.Courses.Select(s => s.Course))
             .Include(r => r.Courses.Select(s => s.Course.CourseDescription))
             .Include(r => r.Courses.Select(s => s.Course.CourseType))
             .Include(r => r.Courses.Select(s => s.Course.Department))
             .Include(r => r.Courses.Select(s => s.Course.Teacher));
}

如您所见,大多数代码都在添加与第一种方法相同的实体。 为了减少重复,我尝试了以下操作:

public static IQueryable<Model.Student> DefaultInclude(this IQueryable<Model.Student> cr)
{
    return cr.Include(r => r.Courses.AsQueryable().DefaultInclude());
}

不幸的是,EF不喜欢它并返回错误: “包含路径表达式必须引用在类型上定义的导航属性。对于引用导航属性使用点划线路径,对于集合导航属性使用选择运算符。”

知道是否可以“合并”包括2个实体的列表吗?

谢谢。

  ask by mberube.Net translate from so

本文未有回复,本站智能推荐:

1回复

使用代码优先的实体框架多对多关系

我有2类Foo和Bar 酒吧 然后,我使用迁移来更新数据库。 但是,与其有一个普通的表FooBar。 EF创建2个表 这不是我想要的。 我想我在Bar中添加了2个Foo集合而搞砸了。 我现在应该怎么办?
2回复

使用代码优先的迁移和实体框架

我需要有关如何使用大型后端数据库以及许多开发人员使用独特但相关的实体/表来管理代码优先迁移的建议。 我过去曾看到项目负责人由于难以解决模型和数据库版本之间的不一致而删除了MigrationHistory表。 我不想在我的下一个项目中做这些事情。 如果他们在应该做什么和不应该做什么上分享
1回复

实体框架多对多-代码优先-迁移

我有产品类: 语言课: 在我的EntityTypeConfiguration中: 这将按预期方式创建第三个表,但是当我使用以下种子执行更新数据库时: 它像这样更新关系表ProducLanguages: 它正在插入一种不存在的语言(数字4),我期望的结果是:
1回复

实体框架代码优先和实体跟踪

假设您在业务层中创建了一个纯POCO对象(例如Customer ),然后将其称为context.Add(customer) 。 是否会跟踪您传入并引用的Customer对象? 换句话说,您传递的对象是由ObjectStateManager跟踪的对象,还是不同的对象? 如果它们不是同一对
1回复

实体框架代码中实体的SortedList优先

我需要将项目中的多对多关系从List更改为SortedList。 我将Entity Framework 6与Code First和Automatic Migration结合使用。 我们有一个新的要求是有一个有序列表。 我认为这很简单,但似乎迁移不考虑我的修改。 所以我必须选择另一
2回复

实体框架6多对多代码优先加载使递归结果

我试图首先使用VS 2013学习Entity Framework 6代码。 我正在做与该问题完全相同的事情: 如何首先急切地与实体框架代码加载多对多关系? 使用相同的设置 答案 但是在调试时,我得到了递归结果。 每个学生都包含一个课程列表,而那些课程包含一个学生列表
1回复

代码优先实体框架延迟加载不起作用

我在懒惰加载工作时遇到了麻烦。 如果我这样做: “发布计数”总是0; 但是,如果我在foreach之前取消注释Load()调用,则Post计数是正确的。 有什么想法有什么不对吗? 这是使用的实体类:
1回复

使用实体框架代码优先方法,如何创建一个具有相关实体列表作为子属性的实体?

解决了!!! 感谢下面Gert的评论,我得以解决。 我只需要在保存Order之前将我的Product实体附加到与Order实体相同的上下文中: 原始帖子 感谢您的光临。 这是我的用例: 在电子商务应用程序上,我需要创建一个Order 。 Order具有一个或多个P