如何在视图中获取Batches表DispatchTo关联的Users表UserName?
解决方法:获取DispatchTo对应的UserName
首先,你已经通过@item.User.UserName成功拿到了DispatchBy关联的用户名,要获取DispatchTo对应的用户名,核心是确保实体类的导航属性配置正确,然后在视图中直接访问对应的导航属性即可。
步骤1:确认实体类的导航属性配置
假设你的Batch实体类已经有了对应DispatchBy的User导航属性,那么需要为DispatchTo也添加一个语义清晰的导航属性(建议别用User1这种模糊命名,换成DispatchToUser更易读):
public class Batch { // 其他字段... public int DispatchBy { get; set; } public User User { get; set; } // 对应DispatchBy的导航属性 public int DispatchTo { get; set; } public User DispatchToUser { get; set; } // 对应DispatchTo的导航属性 }
如果用Entity Framework的Fluent API,还需要在DbContext里配置这个关联关系:
protected override void OnModelCreating(ModelBuilder modelBuilder) { // 配置DispatchBy与Users的关联 modelBuilder.Entity<Batch>() .HasOne(b => b.User) .WithMany() .HasForeignKey(b => b.DispatchBy); // 配置DispatchTo与Users的关联 modelBuilder.Entity<Batch>() .HasOne(b => b.DispatchToUser) .WithMany() .HasForeignKey(b => b.DispatchTo); }
步骤2:在视图中访问导航属性
配置完成后,在视图里就能像访问User一样,通过新的导航属性获取DispatchTo的用户名:
@foreach (var item in Model.Batches) { <tr> <th>@item.User.UserName</th> <!-- DispatchBy对应的用户名 --> <th>@item.DispatchByStatus</th> <th>@item.DispatchByTimestamp</th> <th>@item.DispatchToUser.UserName</th> <!-- DispatchTo对应的用户名 --> <th>@item.DispatchToStatus</th> <!-- 其他列内容... --> </tr> }
小提醒:避免空引用异常
如果遇到NullReferenceException,大概率是没提前加载导航属性。查询Batches数据时,要用Include方法显式加载关联的用户实体:
var batches = _context.Batches .Include(b => b.User) // 加载DispatchBy对应的用户 .Include(b => b.DispatchToUser) // 加载DispatchTo对应的用户 .ToList();
要是你的项目里已经用User1作为DispatchTo的导航属性(就像你代码里写的@item.User1.UserName),直接用这个也没问题,只是建议换成更有意义的命名,方便后续维护。
内容的提问来源于stack exchange,提问作者Jeffrey Johnston
相关产品推荐
相关产品推荐

