c# SqlSugar 实现多数据库仓储模式
时间: 2023-06-24 18:02:52 浏览: 276
SqlSugar 是一个轻量级的ORM框架,可以方便地操作多种数据库。下面是一个简单的示例,演示如何使用SqlSugar实现多数据库仓储模式。
首先,我们需要定义一个基本的仓储接口,用于定义一些通用的CRUD操作:
```csharp
public interface IRepository<T> where T : class, new()
{
List<T> Query(Expression<Func<T, bool>> whereExpression);
T QuerySingle(Expression<Func<T, bool>> whereExpression);
void Add(T entity);
void Add(List<T> entities);
void Update(T entity);
void Delete(T entity);
void Delete(Expression<Func<T, bool>> whereExpression);
}
```
然后,我们可以为每种数据库定义一个具体的仓储实现类,实现上述接口中的方法。例如,对于MySQL数据库,可以定义如下的仓储实现类:
```csharp
public class MySqlRepository<T> : IRepository<T> where T : class, new()
{
private readonly SqlSugarClient _db;
public MySqlRepository(string connectionString)
{
_db = new SqlSugarClient(new ConnectionConfig
{
ConnectionString = connectionString,
DbType = DbType.MySql,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
}
public List<T> Query(Expression<Func<T, bool>> whereExpression)
{
return _db.Queryable<T>().Where(whereExpression).ToList();
}
public T QuerySingle(Expression<Func<T, bool>> whereExpression)
{
return _db.Queryable<T>().Single(whereExpression);
}
public void Add(T entity)
{
_db.Insertable(entity).ExecuteCommand();
}
public void Add(List<T> entities)
{
_db.Insertable(entities).ExecuteCommand();
}
public void Update(T entity)
{
_db.Updateable(entity).ExecuteCommand();
}
public void Delete(T entity)
{
_db.Deleteable(entity).ExecuteCommand();
}
public void Delete(Expression<Func<T, bool>> whereExpression)
{
_db.Deleteable<T>().Where(whereExpression).ExecuteCommand();
}
}
```
类似地,我们还可以定义其他数据库的仓储实现类,例如SQL Server、Oracle等。
最后,我们可以定义一个工厂类,根据需要返回相应的仓储实现类。例如,对于MySQL数据库,可以定义如下的工厂类:
```csharp
public class MySqlRepositoryFactory<T> where T : class, new()
{
private readonly string _connectionString;
public MySqlRepositoryFactory(string connectionString)
{
_connectionString = connectionString;
}
public IRepository<T> GetRepository()
{
return new MySqlRepository<T>(_connectionString);
}
}
```
这样,我们就可以根据需要使用不同的数据库,而无需修改业务代码。例如,对于MySQL数据库,可以使用如下的代码:
```csharp
var factory = new MySqlRepositoryFactory<User>("connectionString");
var repository = factory.GetRepository();
var users = repository.Query(u => u.Name == "张三");
```
对于其他数据库也可以使用类似的方式操作。
阅读全文