是的,这是可能的,并且对此的支持已经内置于OrmLiteConnectionFactory
,参见OrmLite项目主页掌握SQLServer + Sqlite shard示例 https://github.com/ServiceStack/ServiceStack.OrmLite#sharding-1000-robots-into-10-sqlite-db-shards---referencing-each-in-a-master-sqlserver-rdbms.
基本上你会注册你的default(或主)首先连接:
var dbFactory = new OrmLiteConnectionFactory(
"Data Source=host;Initial Catalog=RobotsMaster;Integrated Security=SSPI",
SqlServerDialect.Provider);
然后你会注册一个命名连接对于您希望支持的每个其他连接,例如:
dbFactory.RegisterConnection("shard-1",
"~/App_Data/{0}.sqlite".Fmt(shardId).MapAbsolutePath(),
SqliteDialect.Provider);
配置完成后,在不指定名称的情况下打开连接将打开与默认数据库的连接,例如:
using (IDbConnection db = dbFactory.OpenDbConnection()) { ... } //Default DB
虽然您可以指定一个名称来打开与不同提供程序的数据库的命名连接,例如:
using (var dbShard = dbFactory.OpenDbConnection("shard-1")) { ... } //Named DB
手动使用不同的方言提供程序
不同 RDBMS 之间的 SQL 提供程序实现之间的差异包含在每个方言提供程序中。因此,如果您想针对特定的 ADO.NET 提供程序实现使用 OrmLite 的便捷扩展方法,您只需分配您希望使用的 ThreadStatic DialectProvider,例如:
OrmLiteConfig.DialectProvider = SqlServerDialect.Provider;
var dbConn = new SqlConnection(SqlServerConnString);
dbConn.Select<Table>(); //All db access now uses the above dialect provider
这基本上就是全部内容RegisterConnection
OrmLiteConnectionFactory 会自动在幕后为您执行操作。
以下是迄今为止 OrmLite 的所有方言提供程序,以供参考:
- SqlServerDialect.Provider
- SqliteDialect.Provider(提供不同的 32/64 和 Mono impl)
- MySqlDialect.Provider
- PostgreSqlDialect.Provider
- OracleDialect.Provider
- 火鸟方言.Provider