Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ServiceStack OrmLite com vários servidores de banco de dados


Sim, é possível e o suporte para isso já está embutido no OrmLiteConnectionFactory , consulte o Exemplo de estilhaço Master SQLServer + Sqlite na página inicial do projeto OrmLite .

Basicamente, você registraria seu padrão (ou mestre) conexão primeiro com:
var dbFactory = new OrmLiteConnectionFactory(
  "Data Source=host;Initial Catalog=RobotsMaster;Integrated Security=SSPI", 
  SqlServerDialect.Provider); 

Em seguida, você registraria uma conexão nomeada para todas as outras conexões que você deseja oferecer suporte, por exemplo:
dbFactory.RegisterConnection("shard-1", 
  "~/App_Data/{0}.sqlite".Fmt(shardId).MapAbsolutePath(),
    SqliteDialect.Provider);

Uma vez configurado, abrir uma conexão sem especificar um nome abrirá uma conexão com o banco de dados padrão, por exemplo:
using (IDbConnection db = dbFactory.OpenDbConnection()) { ... } //Default DB

Embora você possa especificar um nome para abrir uma conexão nomeada para um banco de dados com um provedor diferente, por exemplo:
using (var dbShard = dbFactory.OpenDbConnection("shard-1")) { ... } //Named DB

Usar manualmente diferentes provedores de dialetos


As diferenças entre as implementações do SQL Provider entre diferentes RDBMSs estão contidas em cada provedor de dialeto. Portanto, se você quiser usar os métodos de extensão de conveniência do OrmLite em uma implementação específica do provedor ADO.NET, basta atribuir o ThreadStatic DialectProvider que deseja usar, por exemplo:
OrmLiteConfig.DialectProvider = SqlServerDialect.Provider;
var dbConn = new SqlConnection(SqlServerConnString);
dbConn.Select<Table>(); //All db access now uses the above dialect provider

Isso é basicamente tudo o que RegisterConnection em OrmLiteConnectionFactory faz automaticamente os bastidores para você.

Para referência, aqui estão todos os provedores de dialeto para OrmLite até este ponto:
  • SqlServerDialect.Provider
  • SqliteDialect.Provider (diferentes 32/64 e impls Mono disponíveis)
  • MySqlDialect.Provider
  • PostgreSqlDialect.Provider
  • OracleDialect.Provider
  • FirebirdDialect.Provider