Blazor C#服务端如何实现从数据库根据Id查询单条数据
GetById单条数据查询实现方案
核心实现逻辑
你现有封装的QueryAsync方法本身已经支持带参数查询,只需要传入Id作为查询条件,再从返回的列表中取第一条匹配数据即可,不需要修改核心的SqlDataAccess基础封装,直接在FiledbData层扩展业务方法即可。
具体实现步骤
1. FiledbData层新增GetById方法
示例代码如下(请替换示例中的实体类名、表名、主键名为你实际业务对应的名称):
// 假设你要查询的实体类为YourModel,表名为YourTable,主键字段为Id public async Task<YourModel?> GetById(int id) { // 写带参数的单条查询SQL string sql = "SELECT * FROM YourTable WHERE Id = @Id"; // 调用现有QueryAsync方法传入查询参数 var queryResult = await _sqlDataAccess.QueryAsync<YourModel, dynamic>(sql, new { Id = id }); // 返回第一条匹配结果,无匹配数据时返回null return queryResult.FirstOrDefault(); }
2. 可选优化:SqlDataAccess层封装通用单查方法
如果多处需要用到单条查询,可以在ISqlDataAccess接口和SqlDataAccess实现类中补充通用的单查方法,避免每次都手动调用FirstOrDefault:
第一步:ISqlDataAccess接口新增方法定义
public interface ISqlDataAccess { // 原有两个核心方法保留 Task<IEnumerable<T>> QueryAsync<T, U>(string sql, U parameters); Task<int> ExecuteAsync<U>(string sql, U parameters); // 新增通用单查方法 Task<T?> QuerySingleOrDefaultAsync<T, U>(string sql, U parameters); }
第二步:SqlDataAccess类实现新增方法
public async Task<T?> QuerySingleOrDefaultAsync<T, U>(string sql, U parameters) { var result = await QueryAsync<T, U>(sql, parameters); return result.FirstOrDefault(); // 如果业务上保证查询条件唯一,也可以用SingleOrDefault,遇到重复数据会抛异常便于排查 // return result.SingleOrDefault(); }
第三步:FiledbData层调用简化
public async Task<YourModel?> GetById(int id) { string sql = "SELECT * FROM YourTable WHERE Id = @Id"; return await _sqlDataAccess.QuerySingleOrDefaultAsync<YourModel, dynamic>(sql, new { Id = id }); }
Blazor页面调用示例
在详情/编辑页面直接注入FiledbData,拿到路由传递的Id后调用即可:
// 页面路由参数接收 [Parameter] public int ItemId { get; set; } private YourModel? CurrentItem { get; set; } protected override async Task OnInitializedAsync() { if (ItemId > 0) { CurrentItem = await _filedbData.GetById(ItemId); } }
内容的提问来源于stack exchange,提问作者Khalid Ab
相关产品推荐
相关产品推荐

