SqlSugar-使用SqlSugar进行多数据库操作

使用SqlSugar进行多数据库操作主要涉及以下几个步骤:

1. 配置数据库连接

首先,你需要在项目的配置文件中(如appsettings.jsonweb.configapp.config)配置多个数据库的连接字符串。每个连接字符串都对应一个不同的数据库。

例如,在appsettings.json中,你可以这样配置:

 

json复制代码

{
"ConnectionStrings": {
"DefaultConnectionSqlServer": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;",
"DefaultConnectionMySql": "server=localhost;user=root;password=myPassword;database=myOtherDataBase;",
// 可以继续添加更多数据库的连接字符串
}
}

2. 创建SqlSugarClient实例

对于每个需要操作的数据库,你都需要创建一个SqlSugarClient的实例,并在创建时传入相应的数据库连接配置。

 

csharp复制代码

using SqlSugar;
// 创建SqlServer数据库的SqlSugarClient实例
var dbClientSqlServer = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = Configuration.GetConnectionString("DefaultConnectionSqlServer"), // 从配置文件获取连接字符串
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
// 其他配置...
});
// 创建MySql数据库的SqlSugarClient实例
var dbClientMySql = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = Configuration.GetConnectionString("DefaultConnectionMySql"), // 从配置文件获取连接字符串
DbType = DbType.MySql,
IsAutoCloseConnection = true,
// 其他配置...
});

3. 执行数据库操作

现在,你可以使用这些SqlSugarClient实例来执行数据库操作了。根据你的业务需求,选择对应的实例来操作相应的数据库。

 

csharp复制代码

// 使用SqlServer数据库实例插入数据
var user = new User { Name = "张三", Age = 20 };
var id = dbClientSqlServer.Insertable(user).ExecuteReturnIdentity();
// 使用MySql数据库实例查询数据
var userList = dbClientMySql.Queryable<User>().ToList();

4. 跨库操作注意事项

  • 跨库查询:SqlSugar本身不直接支持跨数据库的联合查询(JOIN)。如果你需要在不同的数据库之间执行联合查询,你可能需要在应用层进行数据的合并,或者考虑使用数据库级别的解决方案(如SQL Server的链接服务器)。
  • 事务处理:对于需要在多个数据库上保持数据一致性的操作,你可能需要使用分布式事务。SqlSugar本身不直接提供分布式事务的支持,但你可以使用.NET的System.Transactions命名空间中的类来管理分布式事务。然而,请注意分布式事务的性能和复杂性。
  • 性能考虑:在执行多数据库操作时,请考虑每个数据库的性能和负载情况。避免在同一时间内对多个数据库进行大量并发操作,这可能会导致性能问题。

5. 总结

使用SqlSugar进行多数据库操作主要涉及配置多个数据库连接、创建多个SqlSugarClient实例,并根据业务需求选择相应的实例来执行数据库操作。需要注意的是,跨库查询和分布式事务处理可能需要额外的考虑和配置。此外,还应注意每个数据库的性能和负载情况,以确保系统的稳定性和性能。

附SqlSugar应用代码:

using SqlSugar;


//创建数据库对象 (用法和EF Dappper一样通过new保证线程安全)
SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
{
    ConnectionString = "datasource=demo.db",
    DbType = DbType.Sqlite,
    IsAutoCloseConnection = true
},
db => {
 
    db.Aop.OnLogExecuting = (sql, pars) =>
    {

        //获取原生SQL推荐 5.1.4.63  性能OK
        Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));

        //获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用
        //Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars))


    };

    //注意多租户 有几个设置几个
    //db.GetConnection(i).Aop

});

//建库
Db.DbMaintenance.CreateDatabase();//达梦和Oracle不支持建库

//建表(看文档迁移)
Db.CodeFirst.InitTables<Student>(); //所有库都支持     

//查询表的所有
var list = Db.Queryable<Student>().ToList();

//插入
Db.Insertable(new Student() { SchoolId = 1, Name = "jack" }).ExecuteCommand();

//更新
Db.Updateable(new Student() { Id = 1, SchoolId = 2, Name = "jack2" }).ExecuteCommand();

//删除
Db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();


Console.WriteLine("恭喜你已经入门了,后面只需要用到什么查文档就可以了。");
Console.ReadKey();
 

//实体与数据库结构一样
public class Student
{
    //数据是自增需要加上IsIdentity 
    //数据库是主键需要加上IsPrimaryKey 
    //注意:要完全和数据库一致2个属性
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int Id { get; set; }
    public int? SchoolId { get; set; }
    public string? Name { get; set; }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

管理大亨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值