sql >> Databasteknik >  >> RDS >> Oracle

ServiceStack OrmLite med flera databasservrar

Ja det är möjligt och stöd för detta är redan inbyggt i OrmLiteConnectionFactory , se Master SQLServer + Sqlite shard exempel på OrmLites projekthemsida .

I princip skulle du registrera ditt standard (eller master) anslutning först med:

var dbFactory = new OrmLiteConnectionFactory(
  "Data Source=host;Initial Catalog=RobotsMaster;Integrated Security=SSPI", 
  SqlServerDialect.Provider); 

Då skulle du registrera en namngiven anslutning för varje annan anslutning du vill stödja, t.ex.:

dbFactory.RegisterConnection("shard-1", 
  "~/App_Data/{0}.sqlite".Fmt(shardId).MapAbsolutePath(),
    SqliteDialect.Provider);

När det väl är konfigurerat öppnas en anslutning till standarddatabasen genom att öppna en anslutning utan att ange ett namn, t.ex.:

using (IDbConnection db = dbFactory.OpenDbConnection()) { ... } //Default DB

Även om du kan ange ett namn för att öppna en namngiven anslutning till en db med en annan leverantör, t.ex.:

using (var dbShard = dbFactory.OpenDbConnection("shard-1")) { ... } //Named DB

Använd olika dialektleverantörer manuellt

Skillnaderna mellan SQL Provider-implementeringarna mellan olika RDBMS finns inom varje dialektleverantör. Så om du vill använda OrmLites bekvämlighetsförlängningsmetoder mot en specifik ADO.NET-leverantörsimplementering behöver du bara tilldela den ThreadStatic DialectProvider du vill använda, t.ex.:

OrmLiteConfig.DialectProvider = SqlServerDialect.Provider;
var dbConn = new SqlConnection(SqlServerConnString);
dbConn.Select<Table>(); //All db access now uses the above dialect provider

Detta är i princip allt vad RegisterConnection i OrmLiteConnectionFactory gör automatiskt bakom kulisserna åt dig.

Som referens här är alla dialektleverantörer för OrmLite fram till denna punkt:

  • SqlServerDialect.Provider
  • SqliteDialect.Provider (olika 32/64 och Mono impl tillgängliga)
  • MySqlDialect.Provider
  • PostgreSqlDialect.Provider
  • OracleDialect.Provider
  • FirebirdDialect.Provider



  1. radbrytningar förlorade i sql-server

  2. lagra lösenord i SQL Server

  3. Hur man felsöker MySQL-definieringsproblem

  4. Är det bättre att köra många sql-kommandon med en anslutning, eller återansluta varje gång?