【发布时间】:2021-08-13 17:54:43
【问题描述】:
我正在尝试构建一个简单的帮助台应用程序。在这个应用程序中,当创建并显示票证时,我想显示创建用户的名字。我正在尝试解决如何以最好的方式做到这一点。
我扩展了 ApplicationUser 类并添加了 FirstName 和 LastName 列。我还在我的工单表中创建了两个外键,一个用于创建工单的用户,一个用于分配给该工单的代理。因此,当显示工单时,我需要同时显示创建者和代理的名字 + 姓氏,而不是他们的 UserId。
这是我的 ApplicationUser 类
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Ticket> Users { get; set; }
public ICollection<Ticket> Agents { get; set; }
}
这是我的模型:
公共课票 { 公共 int ID { 获取;放; } 公共字符串主题{获取;放; } 公共字符串正文 { 获取;放; } 公共 int 状态 { 获取;放; } 公共字符串用户 ID { 获取;放; } 公共字符串 AgentId { 获取;放; } 公共日期时间创建{获取;放; } 公共日期时间 LastUpdated { 获取;放; } 公共日期时间?完成{得到;放; } 公共布尔静音{得到;放; } [外键(“用户ID”)] 公共虚拟应用程序用户 TicketUser { 获取;放; } [ForeignKey("AgentId")] 公共虚拟 ApplicationUser TicketAgent { get;放; } }这是我的 DbContext:
公共 DbSet 门票 { 获取;放; } 受保护的覆盖无效 OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity() .HasOne(m => m.TicketUser) .WithMany(t => t.Users) .HasForeignKey(m => m.UserId) .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .HasOne(m => m.TicketAgent) .WithMany(t => t.Agents) .HasForeignKey(m => m.AgentId) .OnDelete(DeleteBehavior.Restrict); }这是显示特定工单的控制器操作:
[HttpGet]
public ViewResult Tickets(int id)
{
TicketDetailsViewModel ticketDetailsViewModel = new TicketDetailsViewModel()
{
Ticket = _ticketRepo.GetTicket(id)
};
return View(ticketDetailsViewModel);
}
这是我的视图模型:
public class TicketDetailsViewModel
{
public Ticket Ticket { get; set; }
}
现在,如果我这样做,我可以在视图中显示全名:
@inject 用户管理器用户管理器; @{ var ticketUser = (await userManager.FindByIdAsync(Model.Ticket.UserId)).FirstName + " " + (await userManager.FindByIdAsync(Model.Ticket.UserId)).LastName; }但我不确定这是否是一个好方法。我想了解实现这一目标的最佳方法是什么。
非常感谢。
【问题讨论】:
标签: asp.net-core entity-framework-core asp.net-identity