Technologieaustausch

SqlSugar – Verwenden Sie SqlSugar für Operationen mit mehreren Datenbanken

2024-07-12

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

Die Verwendung von SqlSugar zum Ausführen von Multi-Datenbank-Vorgängen umfasst hauptsächlich die folgenden Schritte:

1. Datenbankverbindung konfigurieren

Zuerst müssen Sie die Konfigurationsdatei in Ihrem Projekt festlegen (z. B.appsettings.jsonweb.configoderapp.config ) Konfigurieren Sie Verbindungszeichenfolgen für mehrere Datenbanken. Jede Verbindungszeichenfolge entspricht einer anderen Datenbank.

Zum Beispiel inappsettings.json, Sie können es wie folgt konfigurieren:

 

json复制代码

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

2. Erstellen Sie eine SqlSugarClient-Instanz

Für jede Datenbank, die Sie bearbeiten müssen, müssen Sie eine erstellenSqlSugarClientInstanz und übergeben Sie beim Erstellen die entsprechende Datenbankverbindungskonfiguration.

 

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. Führen Sie Datenbankoperationen durch

Jetzt können Sie diese verwendenSqlSugarClient Instanz zum Ausführen von Datenbankoperationen. Wählen Sie entsprechend Ihren Geschäftsanforderungen die entsprechende Instanz aus, um die entsprechende Datenbank zu betreiben.

 

csharp复制代码

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

4. Vorsichtsmaßnahmen für datenbankübergreifende Operationen

  • Datenbankübergreifende Abfrage : SqlSugar selbst unterstützt datenbankübergreifende gemeinsame Abfragen (JOIN) nicht direkt. Wenn Sie Verbundabfragen zwischen verschiedenen Datenbanken durchführen müssen, müssen Sie möglicherweise die Daten auf der Anwendungsebene zusammenführen oder die Verwendung einer Lösung auf Datenbankebene in Betracht ziehen (z. B. den Verbindungsserver von SQL Server).
  • Transaktionsverarbeitung : Für Vorgänge, die Datenkonsistenz über mehrere Datenbanken hinweg erfordern, möchten Sie möglicherweise verteilte Transaktionen verwenden. SqlSugar selbst bietet keine direkte Unterstützung für verteilte Transaktionen, Sie können jedoch .NET verwendenSystem.Transactions Klassen im Namespace zur Verwaltung verteilter Transaktionen. Beachten Sie jedoch die Leistung und Komplexität verteilter Transaktionen.
  • Leistungsüberlegungen : Berücksichtigen Sie bei der Durchführung von Vorgängen mit mehreren Datenbanken die Leistung und Auslastung jeder Datenbank. Vermeiden Sie große Mengen gleichzeitiger Vorgänge auf mehreren Datenbanken gleichzeitig, da dies zu Leistungsproblemen führen kann.

5. Zusammenfassung

Die Verwendung von SqlSugar für Vorgänge mit mehreren Datenbanken umfasst hauptsächlich das Konfigurieren und Erstellen mehrerer DatenbankverbindungenSqlSugarClient Instanz, und wählen Sie die entsprechende Instanz aus, um Datenbankvorgänge entsprechend den Geschäftsanforderungen auszuführen. Es ist zu beachten, dass datenbankübergreifende Abfragen und verteilte Transaktionsverarbeitung möglicherweise zusätzliche Überlegungen und Konfigurationen erfordern. Darüber hinaus sollte auf die Leistung und Auslastung jeder Datenbank geachtet werden, um die Stabilität und Leistung des Systems sicherzustellen.

Im Anhang finden Sie den SqlSugar-Anwendungscode:

mit SqlSugar;


//Datenbankobjekt erstellen (die Verwendung ist die gleiche wie bei EF Dapppper, um die Thread-Sicherheit durch neue zu gewährleisten)
SqlSugarClient Db = neuer SqlSugarClient(neue ConnectionConfig()
{
Verbindungszeichenfolge = "Datenquelle=demo.db",
DbType = DbType.Sqlite,
IsAutoCloseConnection = true
},
db =&gt; {
 
db.Aop.OnLogExecuting = (sql, pars) =&gt;
    {

// Holen Sie sich die native SQL-Empfehlung 5.1.4.63, die Leistung ist in Ordnung
Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));

//Parameterfreies SQL zu erhalten hat Auswirkungen auf die Leistung. Besonders großes SQL mit vielen Parametern sollte zum Debuggen verwendet werden.
//Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars))


    };

//Beachten Sie, dass es für die Mandantenfähigkeit mehrere Einstellungen gibt.
//db.GetConnection(i).Aop

});

//Datenbank erstellen
Db.DbMaintenance.CreateDatabase(); // Dameng und Oracle unterstützen die Datenbankerstellung nicht

//Eine Tabelle erstellen (siehe Dokumentmigration)
Db.CodeFirst.InitTables<Student> (); //Alle Bibliotheken unterstützen

//Die gesamte Tabelle abfragen
var Liste = Db.Abfragbar<Student> ().Auflisten();

//einfügen
Db.Insertable(neuer Student() { SchoolId = 1, Name = "jack" }).ExecuteCommand();

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

//löschen
Db.Löschbar<Student> ().Wo(it =&gt; it.Id == 1).ExecuteCommand();


Console.WriteLine("Herzlichen Glückwunsch zum Start, Sie müssen später nur noch die Dokumentation durchsehen.");
Console.ReadKey();
 

//Die Entität hat die gleiche Struktur wie die Datenbank
öffentliche Klasse Student
{
//Die Daten erhöhen sich selbst und müssen mit IsIdentity hinzugefügt werden
//Die Datenbank ist der Primärschlüssel und muss mit IsPrimaryKey hinzugefügt werden
//Hinweis: Zwei Attribute müssen vollständig mit der Datenbank übereinstimmen
[SugarColumn(IstPrimärschlüssel = wahr, IstIdentität = wahr)]
öffentliche int Id { abrufen; festlegen; }
öffentliche int? SchoolId { abrufen; festlegen; }
öffentliche Zeichenfolge? Name { abrufen; festlegen; }
}