2016-05-04 12 views
0

私たちは、PostgreSQLデータベースに接続するためにインラインクエリを使用するpetapoco mini ORMを使用しています。 PostgreSQLは、我々はこのために何をすべきか、すべてのクエリ ための構文を変更する必要があるので、二重引用符を使用するにpetapocoを使用して別のデータベースに接続しています

public async Task<IEnumerable<P>> FetchExistP(CQ c) 
    { 
     var query = "select * from \"P\"where \"Pr\"= " + c.M; 
     var database = BuildDatabase(c.DatabaseId.ToString(CultureInfo.InvariantCulture)); 
     return await database.FetchAsync<P>(query); 
    } 

は、今、私たちはwell.SinceクエリとしてSQLServerデータベースをサポートします。

  1. 私たちは工場設計パターンまたは他のデザインパターンを使用して、SQLバージョンの複製クラスファイルを作成する必要がありますか?

  2. 私たちはクエリをとり、データベースに基づいて任意のユーティリティを持っていますか? はそれに応じて構文を変換しますか?

  3. 他のオプションはありますか?

答えて

0

まず、すべてのCRUDアクションでDataAccessレイヤーがリポジトリレイヤーを使用するため、アプリを設定する必要があります。 BusinessLogicはDataAccessレイヤーのみを使用します。つまり、あなたのアプリケーションはデータベースオブジェクトに関連するPOCOオブジェクトを渡しています。

DataAccessレイヤがリポジトリオブジェクトを直接インスタンス化せず、リポジトリのタイプを要求するように、依存性インジェクションを実装します。現在のリポジトリはPostgreSQLで実装されています。新しいリポジトリはSQL Serverで実装されます。両方のリポジトリは同じインタフェースを実装し、DataAccess層はデータベースについて何も知る必要はありません。データベースを切り替える準備ができたら、依存関係注入構成を変更してSQL Server Repositoryオブジェクトを返します。

ここに依存性注入のための簡単なフレームワークがあります:Ninject

+0

ありがとうRudy。私はこの回答を最近見たことがあります実際に私はちょうど工場パターンスイッチを使用して私のリポジトリクラスでインラインクエリを変更しました – user3615869

関連する問題