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

Blazor(.NET Core7)中如何显示Server Type而非Server Type Id

解决方案:关联ServerNames与ServerTypes获取服务器类型名称

错误原因说明

你遇到的server names doesn't contain definition for ServerType错误,主要是因为ServerNames实体类未配置与ServerTypes的导航属性,或是LINQ查询的关联写法有误。


1. 确认实体类与DbContext配置

先确保实体类结构正确,可选配置导航属性简化后续查询:

// ServerNames实体类
public class ServerNames
{
    public int ServerId { get; set; }
    public string ServerName { get; set; }
    public int ServerTypeId { get; set; }
    // 可选:添加与ServerTypes的导航属性
    public ServerTypes ServerType { get; set; }
}

// ServerTypes实体类
public class ServerTypes
{
    public int ServerTypeId { get; set; }
    public string ServerTypeName { get; set; }
}

在DbContext中配置外键关联(若未自动识别):

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<ServerNames>()
        .HasOne(sn => sn.ServerType)
        .WithMany()
        .HasForeignKey(sn => sn.ServerTypeId);
}

2. 修改GetAll()方法的两种实现方式

首先创建一个ViewModel用于封装返回结果(避免直接返回实体类):

public class ServerViewModel
{
    public int ServerId { get; set; }
    public string ServerName { get; set; }
    public string ServerTypeName { get; set; }
}

方式一:利用EF导航属性(推荐)

通过Include加载关联数据,再通过Select映射到ViewModel:

public async Task<List<ServerViewModel>> GetAll()
{
    return await _context.ServerNames
        .Include(sn => sn.ServerType) // 加载关联的ServerTypes数据
        .Select(sn => new ServerViewModel
        {
            ServerId = sn.ServerId,
            ServerName = sn.ServerName,
            ServerTypeName = sn.ServerType.ServerTypeName
        })
        .ToListAsync();
}

方式二:手动LINQ Join关联(无需导航属性)

直接通过ServerTypeId字段关联两个表:

public async Task<List<ServerViewModel>> GetAll()
{
    var query = from sn in _context.ServerNames
                join st in _context.ServerTypes on sn.ServerTypeId equals st.ServerTypeId
                select new ServerViewModel
                {
                    ServerId = sn.ServerId,
                    ServerName = sn.ServerName,
                    ServerTypeName = st.ServerTypeName
                };

    return await query.ToListAsync();
}

3. 额外排查点

  • 检查LINQ语句中是否误将ServerTypeName的来源指向ServerNames类(需从关联的ServerTypes表获取)
  • 确认数据库中servernames表的ServerTypeId与servertypes表的ServerTypeId字段类型一致,且存在匹配的关联数据

内容的提问来源于stack exchange,提问作者ahmed abdelaziz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:45:42