Why
- 以前在写有关于数据库操作的时候,其实一直用的库也是
sqlsugar
的,但是一直没有了解过有关于仓储模式的操作。之前的操作都是每次都新建一个Client
,然后每次需要取数据的时候通过泛型然后去获取。虽然这种方法没啥问题,其中主要使用的模式是单例,但是这个的话想要扩展是一个很复杂的情况,上周末无意中看到了仓储模式的介绍,才发现原来可以这么使用数据库,也算是又学到了。
How
- 安装包的部分则跳过。
- 首先需要继承
SimpleClient
,新建一个仓储类。注意其中有关于ResourceRepository
是自建的资源文件,可以直接替换成你的数据库连接字符串。
public class PQRepository<T> : SimpleClient<T> where T : class, new()
{
public PQRepository(ISqlSugarClient? context = null) : base(context)
{
if (context == null)
{
base.Context = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = ResourceRepository.connectString,
DbType = DbType.MySql,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute,
});
}
}
}
public interface IUserService
{
Task<PageList<UserData>> GetPageUsersAsync();
Task<UserData> GetUserByIdAsync(string id);
Task<bool> InsertUserAsync(UserData userData);
}
- 新建一个服务类。(其实应该叫数据仓储类,但是我习惯这么使用了)注意此处只是介绍,其实内部的这些已经实现了的方法直接调用就可以了,你可以添加你自己的业务逻辑。
public class UserService : PQRepository<UserData>, IUserService
{
public async Task<List<UserData>> GetPageUsersAsync()
{
return await base.GetListAsync();
}
public Task<UserData> GetUserByIdAsync(string id)
{
return base.GetByIdAsync(id);
}
public Task<bool> InsertUserAsync(UserData userData)
{
return base.InsertAsync(userData);
}
}
public class PQDBManager
{
public UserService UserServices { get; set; } = new();
public PQDBManager()
{
}
}
public static void AddPQSqlSugar(this IServiceCollection services)
{
services.AddSingleton<PQDBManager>(p => new PQDBManager());
}
builder.Services.AddPQSqlSugar();
Tips
- 其实如果理解的话很简单,就是对于操作概念的理解,也就是你得知道有这么个玩意儿才能知道要不要去用,我就是吃亏之前甚至不知道有仓储,一直写的冗余代码。