質問: 私は現在、いくつかのサイトに住んでいるエンタープライズ製品を開発しました。これはバックエンドデータストレージとしてSQLサーバを使用してMSスタック上で開発されました。私はデータアクセスのためにEF / NHibernateを使用せず、代わりにdapperとカスタム拡張を使用しました。これは、私たちが持っているほとんどのクエリが複雑な集計であり、複数のテーブルにわたるフィルタであるため、うまくいきました。カスタムSQLを使用すると、ボトルネックを特定してより速く修正するための労力が大幅に削減されます。 今はいくつかのビジネス上の理由から、大規模な顧客のためにOracleをサポートする必要があります(完全なOracle製品であるためSQLを使用する方法はありません)。 データベース全体の一貫性を確保するために多くのデータ型を変更する必要があると仮定して、全体的なアプローチについていくつかの方向性を得ることができれば助かります 1. 両方のデータソースでクエリをサポートできるように、アプローチする最善の方法は何ですか。 * **アプローチ1:**大半のクエリをANSI SQLに移動しようとし、一部の特殊なクエリに対してのみ別のクエリを使用します * **アプローチ2:** EFとDapperの組み合わせを使用する。 EFはより単純な操作に使用され、ダッパーは読み取り操作を重くするのに使用されます。 whereever dapperを再度使用すると、oracleとsqlのクエリが別に必要になることがあります * **アプローチ3:** Dapperの使用を継続し、すべての操作に対して別々のクエリを実行する 2)私はデータベースの自動化のためのdacpacを持っています。私はオラクルに対してどのように同じことを達成するのですか? これらとは別に、datetime、currencyなどの処理のように、両方のデータベースをサポートするときに注意する必要がある他の項目はありますか?
回答: あなたがEFを使って開発を始め、すべてのテーブルに対してPOCOクラスを持っているので、私はアプローチ3を好む。 だから、Dapperを使ってOracle環境を構築する(SQL Serverで生成されたPOCOを使用)。 リポジトリ・パターン、作業単位としてDALを構築することができます 文書をお持ちであれば、Oracle / SQL Server間のデータ型の不一致を修正し、DALを統一するために必要な修正を行ってください。 Oracle / SQL Serverを通過するDALの単体テストでは、あなたは安全です。 **Edit2:** SQL Serverを使用してシステムを稼働させ、開発時間を最小限に抑えたら、 **代替案4** :「Oracle DatabaseでEntityFrameworkを使用する」を検討してください。見てみましょう: OracleでMicrosoft Entity Frameworkを使用できますか? そのソリューションに対してPOC(概念実証)を行うことができます。 Oracle.ManagedDataAccess.EntityFrameworkのインストールパッケージ **Oracleデータベースへの移行手順:** Oracle Migration Workbenchを使用してMS SQL ServerデータベースをOracleデータベースに移行する 詳細については: このツールを使用すると、スキーマ・オブジェクト、表、トリガー、ストアド・プロシージャー、およびデータ・タイプ変換を処理するすべてのオブジェクトをマイグレーションできます。データ型間のマッピングに注意するために、 **アプリケーションの迅速な移行Oracle Databaseを使用するには** データベースの移行後、Dapperを使用して、接続文字列を変更してアプリケーションのテストを開始し、すべてのバグ(変更を1つずつデバッグしないでください)を変更のすべての副作用に見つけます。 私はアプリケーションの変更がごくわずかであることを期待しています。 **変更を計画する。** 現在のSql ServerアプリケーションとOracle Databaseの新しいアプリケーションの両方で参照できる、 **共有プロジェクト** (すべてのバージョンが2013年5月15日版の場合)のすべてのDALをdapperで移動できます。 その場合のDALには、接続文字列および共有プロジェクトとの接続クラスだけが含まれます。 **両方のoracle / Ms Sqlサーバーの単体テスト** 1)oracleとMs sqLサーバーのすべての共通テストを含む**共有Projecを**作成**し**ます。 2)ユニットテストプロジェクトを作成するMs Sql Serverの場合、共有プロジェクトを参照し、接続文字列を定義し、他のテストを追加します(実装に若干の違いがある場合)。 3)ユニットテストプロジェクトを作成する手順2 4)両方のテストを実行し、すべてのテストがパスされていることを確認します。変更があった場合は、もう一度テストを実行します。