14

私はservicestackフレームワークを中心にアプリを構築しており、OracleとMSSqlServerの両方のデータにアクセスできる必要があります。これはORMLiteを使用して可能ですか、アプリに1つの方言しか設定できないようですか、それとも何かを見逃したことがありますか?

4

1 に答える 1

16

はい、可能であり、これに対するサポートはすでに組み込まれています。OrmLiteのプロジェクトホームページにあるマスターSQLServer+Sqliteシャードの例を参照しOrmLiteConnectionFactoryてください。

基本的に、最初にデフォルト(またはマスター)接続を次のように登録します。

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
  • FirebirdDialect.Provider
于 2012-12-03T22:56:11.507 に答える