【问题标题】:Asp.Net IdentityUser add custom List PropertyAsp.Net IdentityUser 添加自定义列表属性
【发布时间】:2020-07-02 12:00:18
【问题描述】:

我对使用 asp.net 进行编码还很陌生,所以我的问题可能有一个明显的答案,但我还没有找到答案。

所以目前我正在开发一个用于项目管理的网站,我希望用户在事件发生时得到通知,例如。它们被添加到新项目中,项目已更新等。

为此,我使用新属性列表扩展了 IdentityUser 模型

    public class CojectUser : IdentityUser
    {
        public List<Notification> Notifications { get; set; }
    }

    public class Notification
    {
        public int NotificationID { get; set; }
        public string Message { get; set; }
        public bool Seen { get; set; }
    }

当事件发生时,我将它们添加到用户的通知列表并通过 userManager 更新用户。

public class EventBroker<T> : IEventBroker<T>
    {
        private readonly UserManager<CojectUser> userManager;

        public EventBroker(UserManager<CojectUser> userMgr, IUserValidator<CojectUser> userValid)
        {
            userManager = userMgr;
        }

        public async Task NotifyAsync(Message<T> message, List<UserRole> recipients)
        {
            foreach (var user in recipients)
            {
                var cojectUser = await userManager.FindByNameAsync(user.Name);
                if (cojectUser != null)
                {
                    if (cojectUser.Notifications == null)
                    {
                        cojectUser.Notifications = new List<Notification>();
                    }
                    cojectUser.Notifications.Add(new Notification
                    {
                        Message = message.Information,
                        Seen = false
                    });
                    IdentityResult result = await userManager.UpdateAsync(cojectUser);
                    if (!result.Succeeded)
                    {
                        throw new UserUpdateFailException();
                    }
                }
            }
        }
    }
}

我可以将自定义数据保存到数据库中,但我无法从数据库中再次加载它。 当我想显示用户的通知时,userManager 检索一个带有 null 作为通知列表的用户对象。即使数据存储在数据库中。

 public async Task<IActionResult> Index()
        {
            CojectUser user = await userManager.GetUserAsync(User);
            if(user.Notifications == null)
            {
                user.Notifications = new List<Notification>();
            }
            return View(user);
        }

数据库中的数据:

谁能告诉我我做错了什么?

【问题讨论】:

    标签: asp.net entity-framework asp.net-identity


    【解决方案1】:

    默认情况下,UserManager 不会急于加载属性。

    你应该直接使用 DatabaseContext。

    var user = _context.Users.Include(c => c.Notifications).Where(u => u.Id == user.Id).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      相关资源
      最近更新 更多