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