侧边栏壁纸
博主头像
陌上花 博主等级

回首万事皆休

  • 累计撰写 69 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

CSharp之SqlSugar仓储模式

种向日葵的人
2024-08-30 / 0 评论 / 0 点赞 / 25 阅读 / 0 字

Why

  • 以前在写有关于数据库操作的时候,其实一直用的库也是sqlsugar的,但是一直没有了解过有关于仓储模式的操作。之前的操作都是每次都新建一个Client,然后每次需要取数据的时候通过泛型然后去获取。虽然这种方法没啥问题,其中主要使用的模式是单例,但是这个的话想要扩展是一个很复杂的情况,上周末无意中看到了仓储模式的介绍,才发现原来可以这么使用数据库,也算是又学到了。

How

  • 安装包的部分则跳过。
  • 首先需要继承SimpleClient,新建一个仓储类。注意其中有关于ResourceRepository是自建的资源文件,可以直接替换成你的数据库连接字符串。
public class PQRepository<T> : SimpleClient<T> where T : class, new()
{
    /// <summary>
    /// 仓储模式基本类
    /// </summary>
    /// <param name="context"></param>
    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,
            });

        }

    }

}
  • 新建一个数据库的接口数据。此处只是简单示例。
/// <summary>
/// 用户服务类接口
/// </summary>
public interface IUserService
{
    /// <summary>
    /// 获取所有用户信息
    /// </summary>
    /// <returns></returns>
    Task<PageList<UserData>> GetPageUsersAsync();
    /// <summary>
    /// 根据id获取用户信息
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<UserData> GetUserByIdAsync(string id);
    /// <summary>
    /// 增加用户
    /// </summary>
    /// <param name="userData"></param>
    /// <returns></returns>
    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()
    {

    }

}
  • 依赖注入。
/// <summary>
/// 添加sqlsugar服务
/// </summary>
/// <exception cref="NotImplementedException"></exception>
public static void AddPQSqlSugar(this IServiceCollection services)
{
    services.AddSingleton<PQDBManager>(p => new PQDBManager());
}
//然后在主程序里
builder.Services.AddPQSqlSugar();

Tips

  • 其实如果理解的话很简单,就是对于操作概念的理解,也就是你得知道有这么个玩意儿才能知道要不要去用,我就是吃亏之前甚至不知道有仓储,一直写的冗余代码。
0
博主关闭了所有页面的评论