SqlSugar 封装一个RepositoryFactory
时间: 2023-11-24 21:31:51 浏览: 164
好的,我可以为您封装一个 SqlSugar 的 Repository 工厂类,方便您在项目中使用。以下是代码示例:
```csharp
using SqlSugar;
public interface IRepository<T> where T : class, new()
{
ISugarQueryable<T> Queryable { get; }
T GetById(object id);
bool Insert(T entity);
bool Update(T entity);
bool Delete(T entity);
}
public class Repository<T> : IRepository<T> where T : class, new()
{
private readonly SqlSugarClient _db;
public Repository(SqlSugarClient db)
{
_db = db;
}
public ISugarQueryable<T> Queryable => _db.Queryable<T>();
public T GetById(object id)
{
return _db.Queryable<T>().InSingle(id);
}
public bool Insert(T entity)
{
return _db.Insertable(entity).ExecuteCommand() > 0;
}
public bool Update(T entity)
{
return _db.Updateable(entity).ExecuteCommand() > 0;
}
public bool Delete(T entity)
{
return _db.Deleteable(entity).ExecuteCommand() > 0;
}
}
public class RepositoryFactory
{
private readonly SqlSugarClient _db;
public RepositoryFactory(string connectionString)
{
_db = new SqlSugarClient(new ConnectionConfig
{
ConnectionString = connectionString,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true
});
}
public IRepository<T> GetRepository<T>() where T : class, new()
{
return new Repository<T>(_db);
}
}
```
使用方法如下:
```csharp
// 创建 Repository 工厂类
var factory = new RepositoryFactory("your_connection_string");
// 获取 Repository 实例
var userRepository = factory.GetRepository<User>();
// 使用 Repository 实例
var userList = userRepository.Queryable.Where(u => u.Age > 18).ToList();
var user = userRepository.GetById(1);
userRepository.Insert(new User { Name = "张三", Age = 20 });
userRepository.Update(new User { Id = 1, Name = "李四", Age = 21 });
userRepository.Delete(new User { Id = 1 });
```
以上代码示例中,我们封装了一个 `IRepository` 接口,定义了一些基本的增删改查方法,同时还提供了 `Queryable` 属性,方便您使用 SqlSugar 的链式查询语法。`Repository` 类实现了 `IRepository` 接口,使用 SqlSugar 来执行数据库操作。`RepositoryFactory` 类则是一个工厂类,用于创建 `IRepository` 接口的实例。
阅读全文