sql >> Database >  >> RDS >> Oracle

ServiceStack OrmLite met meerdere databaseservers

Ja, het is mogelijk en ondersteuning hiervoor is al ingebouwd in de OrmLiteConnectionFactory , zie de Master SQLServer + Sqlite shard-voorbeeld op de startpagina van het project van OrmLite .

In principe zou u uw standaard . registreren (of master) verbinding eerst met:

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

Dan zou je een named connectie register registreren voor elke andere verbinding die u wilt ondersteunen, bijvoorbeeld:

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

Als dat eenmaal is geconfigureerd, zal het openen van een verbinding zonder een naam op te geven een verbinding met de standaarddatabase openen, bijvoorbeeld:

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

Hoewel u een naam kunt opgeven om een ​​benoemde verbinding met een db met een andere provider te openen, bijvoorbeeld:

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

Handmatig verschillende dialectproviders gebruiken

De verschillen tussen de SQL Provider-implementaties tussen verschillende RDBMS'en zijn opgenomen in elke dialectprovider. Dus als u de gemaksextensiemethoden van OrmLite wilt gebruiken tegen een specifieke implementatie van een ADO.NET-provider, hoeft u alleen de ThreadStatic DialectProvider toe te wijzen die u wilt gebruiken, bijvoorbeeld:

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

Dit is in wezen alles wat RegisterConnection in OrmLiteConnectionFactory doet automatisch achter de schermen voor je.

Ter referentie zijn hier alle dialectproviders voor OrmLite tot nu toe:

  • SqlServerDialect.Provider
  • SqliteDialect.Provider (verschillende 32/64 en Mono impls beschikbaar)
  • MySqlDialect.Provider
  • PostgreSqlDialect.Provider
  • OracleDialect.Provider
  • FirebirdDialect.Provider



  1. Hoe kan ik Npgsql voorzien van een aangepast gegevenstype als parameter?

  2. Kopteksten opnemen bij gebruik van SELECT INTO OUTFILE?

  3. MYSQL:Cartesisch product van herhalende records vermijden bij zelf-deelname

  4. Een statisch voorvoegsel toevoegen aan een oplopend nummer