Tak, jest to możliwe, a obsługa tego jest już wbudowana w OrmLiteConnectionFactory
, zobacz Przykład Master SQLServer + Sqlite shard na stronie głównej projektu OrmLite
.
Zasadniczo zarejestrowałbyś swój domyślny (lub master) połączenie najpierw z:
var dbFactory = new OrmLiteConnectionFactory(
"Data Source=host;Initial Catalog=RobotsMaster;Integrated Security=SSPI",
SqlServerDialect.Provider);
Następnie zarejestrujesz nazwane połączenie dla każdego innego połączenia, które chcesz obsługiwać, np.:
dbFactory.RegisterConnection("shard-1",
"~/App_Data/{0}.sqlite".Fmt(shardId).MapAbsolutePath(),
SqliteDialect.Provider);
Po skonfigurowaniu otwarcie połączenia bez podania nazwy otworzy połączenie z domyślną bazą danych, np.:
using (IDbConnection db = dbFactory.OpenDbConnection()) { ... } //Default DB
Chociaż możesz określić nazwę, aby otworzyć nazwane połączenie z bazą danych z innym dostawcą, np.:
using (var dbShard = dbFactory.OpenDbConnection("shard-1")) { ... } //Named DB
Ręcznie używaj różnych dostawców dialektu
Różnice między implementacjami dostawcy SQL w różnych systemach RDBMS są zawarte w każdym dostawcy dialektu. Więc jeśli chcesz użyć wygodnych metod rozszerzenia OrmLite przeciwko konkretnej implementacji dostawcy ADO.NET, wystarczy przypisać ThreadStatic DialectProvider, którego chcesz użyć, np.:
OrmLiteConfig.DialectProvider = SqlServerDialect.Provider;
var dbConn = new SqlConnection(SqlServerConnString);
dbConn.Select<Table>(); //All db access now uses the above dialect provider
To w zasadzie wszystko, co RegisterConnection
w OrmLiteConnectionFactory automatycznie robi dla Ciebie za kulisami.
Dla odniesienia tutaj są wszyscy dostawcy dialektów dla OrmLite do tego momentu:
- SqlServerDialect.Provider
- SqliteDialect.Provider (dostępne różne impli 32/64 i Mono)
- MySqlDialect.Provider
- PostgreSqlDialect.Provider
- OracleDialect.Provider
- FirebirdDialect.Provider