使用SqlSugar進行多數據庫操作主要涉及以下幾個步驟:
1. 配置數據庫連接
首先,你需要在項目的配置文件中(如appsettings.json
、web.config
或app.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; }
}