0

エンティティ フレームワークを使用してデータベースと対話する asp.net アプリケーションがあります。

現在取り組んでいる新しいバージョンでは、アプリケーションをデータベースから分離する必要があります。これにより、データは似ているがスキーマが異なるさまざまなデータベースで使用できるようになります。(新規のお客様もご利用いただけます)

これまでのところ、これは私のアプローチですが、間違っていると感じています

  • クライアント データベースによって生成されたデータ エンティティ モデルからのオブジェクトがあります。
  • システムが使用するオブジェクトをカスタム作成しました
  • カスタム オブジェクトを返すすべてのデータ操作の概要を説明するインターフェイスを作成しました
  • データベースに接続されたエンティティ フレームワークからクライアントのオブジェクトを取得し、必要なフィールドをカスタム オブジェクトにロードするインターフェイスの実装を作成しました。

似たようなオブジェクトが 2 セットあるので、これは間違っていると感じます。

例、ここではクライアント データベースから取得し、データをカスタムオブジェクトsalesOrdersにダンプします。Job

public List<Job> getJobs()
{

    List<Job> jobs = new List<Job>();

    using (var context = new TBDIEntities.TBDIEntities())
    {
        //get all future events that are not cancelled
        List<SalesOrder> salesOrders = context.SalesOrders
            .Where(c => c.EVENTCONFIRMATION != "CANCELLED" && c.FUNCTIONDATE >= DateTime.Now)
            .ToList<SalesOrder>();

        jobs.AddRange(from order in salesOrders
                        let dateTime = order.FUNCTIONSTARTTIME
                        where dateTime != null
                        select new Job
                        {
                            Description = order.FUNCTIONTYPE,
                            StartTime = (DateTime)dateTime,
                            Id = order.SALESORDERREF_TXNID.ToString(),
                            ShiftGroups = new List<ShiftGroup>(),
                            Status = order.EVENTCONFIRMATION,
                            ShiftCount = (int)context.BSS_ShiftListView
                                .Count(c => c.SALESORDERREF_TXNID == order.SALESORDERREF_TXNID),
                            ConfirmedShifts = (int)context.BSS_ShiftListView
                                .Count(c => c.SALESORDERREF_TXNID == order.SALESORDERREF_TXNID && c.Confirmed != null),
                            Client = new Client { Name = order.CustomerRef_FullName }
                        });
    }

    return jobs;
}

そのため、新しいコンテキストを作成し、salesOrders(クライアント データベース内のテーブル名) のコレクションを取得し、データを取得してsalesOrders新しいJobオブジェクト (アプリケーションがやり取りするように記述したもの) を作成し、Jobオブジェクトを返します。

SalesOrders似たようなオブジェクト (とJobs) の 2 つのリストがあり、エンティティ フレームワークを使用するだけでなく、オブジェクトごとに CRUD 操作を記述する必要があるため、これは間違っていると感じます。

たとえば、新しいシフトを追加できるページがあります。ただし、Shiftsテーブルはクライアントごとに異なり、変更を加えるとクライアント テーブルを更新する必要があります。では、シフトを使用できるが、エンティティ フレームワークを新しいクライアントのスキーマと交換できるコードを作成するにはどうすればよいでしょうか? データバインドに使用できるコレクションにシフトのようなものが必要asp:ListViewです。

これを行う最も賢い方法は何ですか?プロジェクトを多くのデータベースで再利用できるように、エンティティ フレームワークを使用しながら、顧客のスキーマに依存しないようにするにはどうすればよいですか?

4

1 に答える 1