Berbagi teknologi

SqlSugar-Gunakan SqlSugar untuk operasi multi-database

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Menggunakan SqlSugar untuk melakukan operasi multi-database terutama melibatkan langkah-langkah berikut:

1. Konfigurasikan koneksi database

Pertama, Anda perlu mengatur file konfigurasi di proyek Anda (mis.appsettings.jsonweb.configatauapp.config ) Konfigurasikan string koneksi untuk beberapa database. Setiap string koneksi berhubungan dengan database yang berbeda.

Misalnya, diappsettings.json, Anda dapat mengonfigurasinya seperti ini:

 

json复制代码

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

2. Buat instance SqlSugarClient

Untuk setiap database yang perlu Anda operasikan, Anda perlu membuat aSqlSugarClientmisalnya, dan meneruskan konfigurasi koneksi database yang sesuai saat membuatnya.

 

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. Melakukan operasi basis data

Sekarang Anda dapat menggunakan iniSqlSugarClient contoh untuk melakukan operasi database. Sesuai dengan kebutuhan bisnis Anda, pilih instance yang sesuai untuk mengoperasikan database yang sesuai.

 

csharp复制代码

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

4. Tindakan pencegahan untuk operasi lintas database

  • Kueri lintas basis data : SqlSugar sendiri tidak secara langsung mendukung query gabungan lintas database (JOIN). Jika Anda perlu melakukan kueri gabungan antara database yang berbeda, Anda mungkin perlu menggabungkan data pada lapisan aplikasi, atau mempertimbangkan untuk menggunakan solusi tingkat database (seperti server tertaut SQL Server).
  • pemrosesan transaksi : Untuk operasi yang memerlukan konsistensi data di beberapa database, Anda mungkin ingin menggunakan transaksi terdistribusi. SqlSugar sendiri tidak secara langsung memberikan dukungan transaksi terdistribusi, namun Anda dapat menggunakan .NETSystem.Transactions Kelas di namespace untuk mengelola transaksi terdistribusi. Namun, waspadai kinerja dan kompleksitas transaksi terdistribusi.
  • Pertimbangan kinerja : Saat melakukan operasi multi-database, pertimbangkan kinerja dan beban setiap database. Hindari operasi bersamaan dalam jumlah besar pada beberapa database secara bersamaan, yang dapat menyebabkan masalah kinerja.

5. Ringkasan

Menggunakan SqlSugar untuk operasi multi-database terutama melibatkan konfigurasi beberapa koneksi database dan pembuatan beberapa koneksiSqlSugarClient Instance, dan pilih instance yang sesuai untuk melakukan operasi database berdasarkan kebutuhan bisnis. Perlu dicatat bahwa kueri lintas database dan pemrosesan transaksi terdistribusi mungkin memerlukan pertimbangan dan konfigurasi tambahan. Selain itu, perhatian harus diberikan pada kinerja dan beban setiap database untuk memastikan stabilitas dan kinerja sistem.

Terlampir kode aplikasi SqlSugar:

menggunakan SqlSugar;


//Buat objek database (penggunaannya sama dengan EF Dapppper untuk memastikan keamanan thread melalui yang baru)
SqlSugarClient Db = new SqlSugarClient(Konfigurasi Koneksi baru()
{
ConnectionString = "sumber data=demo.db",
TipeDb = TipeDb.Sqlite,
IsAutoCloseConnection = benar
},
basis data =&gt; {
 
db.Aop.OnLogExecuting = (sql, pars) =&gt;
    {

//Dapatkan rekomendasi SQL asli 5.1.4.63, kinerjanya oke
Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));

//Mendapatkan SQL bebas parameter berdampak pada kinerja. Terutama SQL berukuran besar dengan banyak parameter harus digunakan untuk debugging.
//Konsol.WriteLine(MetodeUtil.GetSqlString(TipeDb.SqlServer,sql,pars))


    };

//Perhatikan bahwa multi-tenancy memiliki beberapa pengaturan.
//db.Dapatkan Koneksi(i).Aop

});

//Membangun basis data
Db.DbMaintenance.CreateDatabase(); // Dameng dan Oracle tidak mendukung pembuatan database

//Buat tabel (lihat migrasi dokumen)
Db.CodeFirst.InitTables<Student> (); //Semua perpustakaan mendukung

// Kueri semua tabel
var daftar = Db.Queryable<Student> ().ToList();

//menyisipkan
Db.Insertable(Siswa baru() { Id Sekolah = 1, Nama = "jack" }).ExecuteCommand();

//memperbarui
Db.Updateable(Siswa baru() { Id = 1, Id Sekolah = 2, Nama = "jack2" }).ExecuteCommand();

//menghapus
Db.Dapat Dihapus<Student> ().Where(itu =&gt; itu.Id == 1).ExecuteCommand();


Console.WriteLine("Selamat memulai, Anda hanya perlu memeriksa dokumentasinya nanti.");
Konsol.ReadKey();
 

//Entitas mempunyai struktur yang sama dengan database
kelas umum Siswa
{
//Data bertambah sendiri dan perlu ditambahkan dengan IsIdentity
//Basis data adalah kunci utama dan perlu ditambahkan dengan IsPrimaryKey
//Catatan: Dua atribut harus benar-benar konsisten dengan database
[SugarColumn(IsPrimaryKey = benar, IsIdentity = benar)]
publik int Id { dapatkan; atur; }
publik int? SchoolId { dapatkan; tetapkan; }
string publik? Nama { dapatkan; tetapkan; }
}