ASP.NET Core FindByAsync不加载导航属性

问题描述 投票:2回答:1

我在使用EF 2.0的ASP.NET Core 2.0应用程序中有一个AppUser类

用户可以发送和接收消息,我有一个方法可以获取最新消息的最新日期(如果有):

    public IEnumerable<Message> MessagesSent { get; set; }
    public IEnumerable<Message> MessagesReceived { get; set; }

    public DateTime DateOfLastMessage()
    {       
        var sentDate = new DateTime();
        var receivedDate = new DateTime();
        if (MessagesSent != null)
        {
            sentDate = this.MessagesSent.Select(x => x.Created).Last();
        }
        if (MessagesReceived != null)
        {
            receivedDate = this.MessagesReceived.Select(x => x.Created).Last();
        }


        return (sentDate > receivedDate ? sentDate : receivedDate);
    }

但是当我使用以下方式加载用户时:

_userManager.FindByIdAsync(relevantContact).Result;

然后不加载导航属性,因此DateOfLastMessage函数将始终是DateTime最小值。

我该如何解决这个问题? (另外,我的方法可以简化......?)

c# asp.net asp.net-core
1个回答
3
投票

_userManager不了解或关心您在User类中拥有的其他导航属性。

如果您想要加载这些属性,您可以选择一些选项。

  • 使用可查询的_userManager.Users.Include(x => x.MessagesSent).Include(x => x.MessagesReceived)
  • 创建自己的UserManager并覆盖FindByIdAsync()方法并注册它以进行依赖注入。
  • 使用DbContext直接查询Users数据。
© www.soinside.com 2019 - 2024. All rights reserved.