ef7无法检索子集合的子对象的属性

j

EF7不支持子对象的延迟加载,但支持该.Include()功能。话虽这么说,我正在努力寻找一些东西,并且不确定在EF7中是否不可能,或者我只是盯着这个太久了。

假设如下所示(检查reg.Activities.Task.Ordinal(一个int),Task始终为空,即使我自己检查数据库并确定实际上存在相关记录也是如此)...

public void SomeOtherMethod()
    var r = getRegistration(User.UserName);
    var act = r.Activities
      .Where(a => a.IsDone == false)  // unfinished
      .OrderByDescending(o => o.Task.Ordinal)  // Task indicates activity type, is always null
      .FirstOrDefault();  // to get a user's most recent unfinished activity

    //DO SOMETHING WITH ACT
}

public Registration getRegistration(string userName) {
    var reg = _context.Registrations
      .Where(r => r.User.UserName == userName)  // this works however?
      .Include(r => r.Acvitities)  // List<Activity>
      .FirstOrDefault();

      return reg;
}

...我在模型类中具有导航属性,但是.Task上面为null且未加载。

此外,由于查询已被投影,因此.Include在创建时我无法再添加其他属性act我不能.ThenInclude在创作中reg,因为类Registration不包括定义的Task属性(但Registration确实有一个集合的ActivitiesList<Activity>,和Activity它有一个Task是与另一台/类,它定义的任务和应提交的顺序每个用户Activity

我尝试了的各种咒语.Join.Include.ThenInclude希望能够在返回对象TaskActivities同时将它们加入到每个Registration对象中,但这失败了,因为Registration它本身不包含Task属性。

我考虑过在GitHub上创建一个新问题,但不确定它是否可行,我只是没有正确看待。


UPDATE1: Mihail建议使用...
.Include(r => r.Activities.Select(resp => resp.Responses))
...但是这会产生异常。该SO(https://stackoverflow.com/a/30151601/3246805)指示用于EF5的那个,.ThenInclude应该使用。

但是,尝试该建议...
.ThenInclude(r => r.Select(t => t.Task))
...会产生以下异常...

The properties expression 'r => {from Activity t in r select [t].Task}' is not valid. The expression should represent a property access: 't => t.MyProperty'. When specifying multiple properties use an anonymous type: 't => new { t.MyProperty1, t.MyProperty2 }'.
Parameter name: propertyAccessExpression



UPDATE2: Stafford要求模式。在可共享仓库中尽最大努力

public class RegistrationData {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    public MyUser User { get; set; }    // MyUser : IdentityUser

    //blah blah, more fields

    public List<UserTask> Activitys { get; set; }
}

public class UserTask {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public bool IsDone { get; set; } = false;

    [Required]
    public int RegistrationId { get; set; }
    [Required]
    public RegistrationData Registration { get; set; }

    [Required]
    public int TaskId { get; set; }
    [Required]
    public Task Task { get; set; }

    public List<UserResponse> Responses { get; set; }
}

public class Task {
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.None)] // ID comes from loaded config
    public int Id { get; set; }

    [StringLength(20, MinimumLength = 1)]
    public string Name { get; set; }

    [Required]
    public int Ordinal { get; set; }

    [Required]
    public int GroupId { get; set; }
}

public class UserResponse {
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public int UserTaskId { get; set; }
    [Required]
    public int QuestionNumber { get; set; }
}
斯塔福德·威廉姆斯

使用Include后跟ThenInclude该子项的子项属性。子属性可能不会在intellisense中显示为ThenInclude,而是无论如何都要输入-它会按预期进行编译和运行。

var reg = _context.Registrations
  .Where(r => r.User.UserName == userName)
  .Include(r => r.Acvitities).ThenInclude(a => a.Task)
  .Include(r => r.Activities).ThenInclude(a => a.SomethingElse)
  .FirstOrDefault();
  return reg;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

嵌套的forEach从Firebase检索子集合

来自分类Dev

在 StreamBuilder (Flutter) 中检索子集合

来自分类Dev

VBA类:Collection.item成员是一个集合。如何检索子集合项元素

来自分类Dev

AutoMapper忽略子集合属性

来自分类Dev

Firestore从子集合返回对象

来自分类Dev

检索文档数据,其中条件值是子集合值

来自分类Dev

如何从文档中检索未知子集合

来自分类Dev

更新 EF6 中的实体子集合

来自分类Dev

使用linq按子集合的属性进行过滤

来自分类Dev

GroupBy具有嵌套子集合中的属性

来自分类Dev

如何根据子集合中的值选择对象?

来自分类Dev

如何从已知子对象ID的对象中检索子对象

来自分类Dev

EF7不保存对象图

来自分类Dev

EF 7 .include不会检索子级的父级

来自分类Dev

检索集合 + 子集合给我一个空的渲染

来自分类Dev

休眠更新子集合

来自分类Dev

Firestore子集合ID

来自分类Dev

子集合中的总和

来自分类Dev

Firestore 子集合 '!=' 查询

来自分类Dev

EF7代理集合未生成

来自分类Dev

DevExpress XAF:获取子集合的集合

来自分类Dev

尝试将父属性用作子集合表达式中的参数;LinqKit抛出“无法将MethodCallExpressionN强制转换为LambdaExpression”

来自分类Dev

EF7加载列表中实体的子级

来自分类Dev

检索子值的 JSON 对象

来自分类Dev

如何过滤比较datetime属性与另一个加timepan值的子集合?

来自分类Dev

具有根属性的AutoMapper第三级子集合映射

来自分类Dev

未填充EF7核心多对多引用对象

来自分类Dev

实体框架基于跨多个子集合的过滤器的选择对象

来自分类Dev

将WPF ListView绑定到带有子集合的对象