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

Blazor Server无法显示SQL Server数据库数据求助

问题根源排查

从你提供的信息来看,导致数据无法显示的核心问题有3个:

  1. FetchData页面未触发数据加载:页面仅写了渲染逻辑,但没有调用服务方法获取数据,本质上没有发起数据库查询请求。
  2. 实体类字段不完整:TestTable实体仅定义了Id属性,数据库中的Ralf1、Hilda2、Ed3字段没有对应映射,就算能查询到数据也无法读取完整内容。
  3. 数据库字段类型兼容性问题:SQL Server中TEXT是已废弃的旧类型,EF Core对其映射可能存在隐性问题,且用TEXT作为主键不符合最佳实践。

分步解决方法

1. 修复页面数据加载逻辑

在FetchData页面中注入服务,并在初始化阶段调用数据查询方法:

@page "/fetchdata"
@inject TestTableService TestService

<h3>TestTable 数据</h3>

@if (_testData == null)
{
    <p><em>加载中...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>ID</th>
                <th>Ralf1</th>
                <th>Hilda2</th>
                <th>Ed3</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in _testData)
            {
                <tr>
                    <td>@item.Id</td>
                    <td>@item.Ralf1</td>
                    <td>@item.Hilda2</td>
                    <td>@item.Ed3</td>
                    <td>
                        <button class="btn btn-sm btn-primary">编辑</button>
                        <button class="btn btn-sm btn-danger">删除</button>
                    </td>
                </tr>
            }
        </tbody>
    </table>
}

@code {
    private List<TestTable>? _testData;

    protected override async Task OnInitializedAsync()
    {
        // 调用服务方法加载数据
        _testData = await TestService.GetIDAsync();
    }
}

2. 补全实体类字段映射

更新TestTable实体,添加数据库中所有字段对应的属性:

public class TestTable
{
    public string Id { get; set; }
    public string? Ralf1 { get; set; }
    public string? Hilda2 { get; set; }
    public string? Ed3 { get; set; }
}

3. 修复数据库字段类型问题(可选但推荐)

  • 若允许修改数据库,将TEXT类型替换为NVARCHAR(MAX)(或固定长度的NVARCHAR(n),主键建议用NVARCHAR(50)),执行SQL:
ALTER TABLE [dbo].[TestTable] ALTER COLUMN [Id] NVARCHAR(50) NOT NULL;
ALTER TABLE [dbo].[TestTable] ALTER COLUMN [Ralf1] NVARCHAR(MAX) NULL;
ALTER TABLE [dbo].[TestTable] ALTER COLUMN [Hilda2] NVARCHAR(MAX) NULL;
ALTER TABLE [dbo].[TestTable] ALTER COLUMN [Ed3] NVARCHAR(MAX) NULL;
  • 若无法修改数据库,在TestdbContext中显式配置字段类型映射:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<TestTable>()
        .Property(t => t.Id)
        .HasColumnType("TEXT")
        .IsRequired();
    modelBuilder.Entity<TestTable>()
        .Property(t => t.Ralf1)
        .HasColumnType("TEXT");
    modelBuilder.Entity<TestTable>()
        .Property(t => t.Hilda2)
        .HasColumnType("TEXT");
    modelBuilder.Entity<TestTable>()
        .Property(t => t.Ed3)
        .HasColumnType("TEXT");
}

4. 验证服务与查询方法正确性

确保TestTableService的GetIDAsync方法正确实现:

public class TestTableService
{
    private readonly TestdbContext _dbContext;

    public TestTableService(TestdbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public async Task<List<TestTable>> GetIDAsync()
    {
        // 直接查询所有数据,若有分页需求可后续添加
        return await _dbContext.TestTable.ToListAsync();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:42:52