Blazor入门100天 : 身份验证和授权 - 使用 FreeSql orm 管理ids数据
public class FreeSqlInterop
{
private readonly IFreeSql _freeSql;
public FreeSqlInterop(IFreeSql freeSql)
{
_freeSql = freeSql;
}
public async Task<bool> IsUniqueIdAvailableAsync(string realm, string id)
{
var count = await _freeSql.Select<Id, long>()
.Where(a => a.Realm == realm && a.Id == id)
.CountAsync();
return count == 0;
}
public async Task<string> AllocateIdAsync(string realm, int length)
{
var randomId = IdHelper.GenerateRandomId(length);
var id = $"{realm}:{randomId}";
var idEntity = new Id
{
Realm = realm,
Id = id,
Expiry = DateTime.UtcNow.AddMinutes(5) // 设置过期时间避免无效数据堆积
};
// 尝试插入ID,如果存在冲突则重试
while (!await IsUniqueIdAvailableAsync(realm, id))
{
randomId = IdHelper.GenerateRandomId(length);
id = $"{realm}:{randomId}";
idEntity.Id = id;
}
await _freeSql.Insert(idEntity).ExecuteAffixAsync();
return id;
}
}
public class Id
{
public Guid Id { get; set; }
public string Realm { get; set; }
public DateTime Expiry { get; set; }
}
public static class IdHelper
{
public static string GenerateRandomId(int length)
{
// 实现随机ID生成逻辑
}
}
这个代码示例展示了如何使用FreeSql ORM来管理ids数据。FreeSqlInterop
类封装了与ids数据库交互的方法,包括检查ID是否可用以及分配一个新的ID。Id
实体类用于映射数据库中的ids数据表,而IdHelper
类提供了生成随机ID的辅助方法。这个示例简化了原始代码,并提供了更清晰的逻辑和更好的错误处理。
评论已关闭