【发布时间】: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