データベースとのインターフェイスにエンティティ フレームワークを使用していますが、汎用の挿入関数を作成したいと考えています。
私はそれをスタンドアロン テーブルで動作させました。つまり、Set 関数を使用して正しいタイプのテーブルを取得する Customer テーブルに新しいレコードを追加しました。しかし、問題は、相互参照テーブルがエンティティ フレームワークのリストにマップされていることです。これは、オブジェクト指向のインターフェイスに準拠しています (その理由は理解できます)。ただし、一般的にはエンティティ全体を処理しますが、エンティティ内のリストを処理する必要があるシナリオがいくつかあるため、一般的なマナーでそのような挿入をどのように説明できますか。
もちろん、これらの特定のケースに対処するための特定のメソッドを作成することはできますが、これを行うことは本当に避けたいです!
私が持っていた 1 つのアイデアは、タイプ、アクションのディクショナリを作成することです。タイプは、サービスが受け取る可能性のあるリスト挿入に関連付けられた DTO のタイプであり、アクションはリストを処理するための特定の挿入コードです。そのようにして、ジェネリックを引き続き使用できます。関数を挿入し、一般的な挿入コードとは対照的に実行する必要がある辞書に「挿入ルール」があるかどうかを確認します。このように、クライアント プログラミングの観点からは、1 つの挿入関数のみが使用されます。しかし、これにはまだ特定の挿入コードを記述する必要があります-これは本当に避けたいです。
私は EF の経験があまりないので、知りたいのは、この問題を回避するためのよりクリーンなオプションがあるかどうかです。
私の問題を示すコード:
通常のジェネリック挿入 -
public void InsertRecord(object newRecord, )
{
using (PIRSDBCon db = new PIRSDBCon())
{
var table = db.Set(newRecord.GetType());
table.Add(newRecord);
db.SaveChanges();
}
}
ご覧のとおり、これはテーブルへの標準の挿入を処理します
相互参照テーブルに挿入 -
public void InsertCarerCheck(int carer_id, Check newCheck)
{
using (PIRSDBCon db = new PIRSDBCon())
{
Foster_Carers carer_record = (from c in db.Foster_Carers
where c.foster_carer_id == carer_id
select c).SingleOrDefault();
carer_record.Checks1.Add(newCheck);
db.SaveChanges();
}
}
Checks1 は、里親とチェック レコードをリンクする相互参照テーブル用に EF によって生成されるリスト プロパティです。このようなシナリオは、一般的な挿入関数でどのように説明できますか?