我正在围绕servicestack框架构建一个应用程序,并且需要能够访问Oracle和MS Sql Server中的数据。使用ORMLite是否可行,似乎我只能为该应用设置一种方言,或者我错过了什么?

最佳答案

是的,这是可能的,并且OrmLiteConnectionFactory中已经内置了对此功能的支持,请参见Master SQLServer + Sqlite shard example on OrmLite's project home page

基本上,您首先要使用以下命令注册默认(或主)连接:

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


这基本上就是OrmLiteConnectionFactory中的RegisterConnection为您在后台自动执行的所有操作。

作为参考,到目前为止是OrmLite的所有方言提供者:


SqlServerDialect.Provider
SqliteDialect.Provider(提供不同的32/64和Mono impls)
MySqlDialect.Provider
PostgreSqlDialect.Provider
Oracle方言提供者
火鸟方言提供者

关于sql-server - 具有多个数据库服务器的ServiceStack OrmLite,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13691575/

10-12 19:53