3

さて、タイトルは長いですが、私の問題はここにあります:

約 10 ~ 12 個の異なるオブジェクトがあり、ソフトウェアでそれらを操作する必要があります。簡単です。クラスを作成して、好きなことをするだけです。しかし、データベース行と主な問題を表すこのすべてのクラス - 私のソフトウェアは、このオブジェクトを異なるデータベース (oracle、mysql、interbase、postgres、firebird) から読み書きできる必要があります。オブジェクトは、異なるフィールド (名前と型) の異なるテーブルであっても、異なるデータベースに格納されます [そして、このすべてが原因で、このデータベースはそれら自身の間で同期されていません]。

そのため、すべての機能を提供するコードを書くのに苦労します。約 5 つのデータベース * 10 個のオブジェクト = 50 個のクラスであり、将来的には拡張されると考えてください...

これを構築する方法、正しい方法、ベストプラクティスを教えてもらえますか?

4

4 に答える 4

3

まず、クラスを作成して、さまざまなデータベースに対するこのすべての呼び出しをラップします。おそらく、データベースが提供するデータ プロバイダーを使用して、それぞれに接続します。

このドライバーは、ado.net を使用してデータベースを操作するための一連のクラスを提供します。このクラスをラップ クラスで使用して、データをインポート/エクスポートします。通常、このデータ プロバイダーには、データベース タイプを .net clr タイプにマップする方法があります。

また、各データベースの重要なポイントを見つける必要があります。たとえば、問題のデータベースがテーブル、テーブル フィールド、インデックス、キーの情報を格納する場所などです。

編集:

  • 彼の情報とそのテーブルのフィールドの情報(フィールド名、タイプ、長さなど)を格納するデータベース内のテーブルを読み取ります
  • このテーブル情報を格納するために作成するこのクラスでは、clr タイプも格納するためのフィールドを作成します (前に述べたように、このデータ プロバイダーはデータベース タイプを .net clr タイプにマップする方法を提供します)。
  • これで、各データベースの特性を考慮したテーブル情報が得られました。

これで、インポート/エクスポート操作を開始できます。

たとえば、oracle から読み取り、sql に書き込むとします。

  • そのテーブルのテーブル情報を読み取ります。
  • テーブルからデータを読み取り(選択)、データテーブルに保存します
  • あとは、もちろん oracle から読み取ったデータを使用して、sql テーブルに挿入するだけです。
  • テーブルについて得た情報を覚えていますか? 各データベースの型マッピングを尊重する必要があります。

見る:

http://technet.microsoft.com/en-us/library/ms151817.aspx

于 2013-08-27T13:03:21.397 に答える
1

私は次の方法であなたの要件を達成します:

まず、dbmlデータベースごとに 1 つずつ、多数の (Linq2SQL) ファイルを追加します。必要に応じて、ADO.NET などを使用できます。生成されたデータ オブジェクトを別の方法で呼び出す必要があります... MySqlDataObject、OracleDataObject、FirebirdDataObject などのようなものです。

UI では、1 セットのデータ オブジェクトのみが必要です。したがって、データ層では、さまざまなデータベースから各データ オブジェクトを埋めるメソッドが必要になります... CopyToMySqlDataObject(ClrDataObject clrDataObject)CopyToOracleDataObject(ClrDataObject clrDataObject)CopyToFirebirdDataObject(ClrDataObject clrDataObject).

最後に、DataProviderすべてのデータ ソース オブジェクトを参照するクラスを使用します。このクラスは、利用可能な各アクションをホストし、各メソッドですべてのデータ ソースを呼び出します。次の例を見てください。

public int UpdateDataObject(ClrDataObject clrDataObject)
{
    using (MySqlDataContext dataContext = new MySqlDataContext())
    {
        MySqlDataObject mySqlDataObject = dataContext.MySqlDataObjects.Where(d => 
d.Id == clrDataObject.Id).FirstOrDefault();
        CopyToMySqlDataObject(clrDataObject, mySqlDataObject);
        dataContext.SubmitChanges(ConflictMode.FailOnFirstConflict);
        return 0;
    }
    ...
    using (OracleDataContext dataContext = new OracleDataContext())
    {
        OracleDataObject oracleDataObject = dataContext.OracleDataObjects.Where(d => 
d.Id == clrDataObject.Id).FirstOrDefault();
        CopyToOracleDataObject(clrDataObject, oracleDataObject);
        dataContext.SubmitChanges(ConflictMode.FailOnFirstConflict);
        return 0;
    }
}
于 2013-08-27T13:06:55.557 に答える