You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在视图中获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:27:13