Blazor Server无法显示SQL Server数据库数据求助
问题根源排查
从你提供的信息来看,导致数据无法显示的核心问题有3个:
- FetchData页面未触发数据加载:页面仅写了渲染逻辑,但没有调用服务方法获取数据,本质上没有发起数据库查询请求。
- 实体类字段不完整:TestTable实体仅定义了
Id属性,数据库中的Ralf1、Hilda2、Ed3字段没有对应映射,就算能查询到数据也无法读取完整内容。 - 数据库字段类型兼容性问题: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
相关产品推荐
相关产品推荐

