EntityFrameworkでバックアップされたリポジトリに繰り返し発生するコードブロックがあり、何らかの方法で一般化してメソッドとして呼び出したいので、コードを繰り返すのではなく再利用します。
現在のコードブロックは次のようになります。
// Archive deleted MyItems sections
_t.MyItems.Where(x => x.ValidTo == null && !team.MyItems.Contains(x)).ToList().ForEach(x => x.ValidTo = DateTime.Now);
// Add or update MyItems sections
foreach (var MyItemsSection in team.MyItems)
{
if (MyItemsSection.Id == default(int))
{
MyItemsSection.ValidFrom = DateTime.Now;
_t.MyItems.Add(MyItemsSection);
}
else
{
var _MyItemsSection = _t.MyItems.FirstOrDefault(x => x.Id == MyItemsSection.Id);
context.Entry(_MyItemsSection).CurrentValues.SetValues(MyItemsSection);
}
}
_t
はEntityFrameworkに接続されたオブジェクトグラフteam
ですが、は切断され、外部で更新された可能性のある同じタイプのオブジェクトグラフです。ここでの目標は、2つのオブジェクトグラフを同期して、変更が永続化されるようにすることです。
_t.MyItemsとteam.MyItemsを渡す必要があります。ここで、MyItemsはジェネリック化されるため、同じメソッドがMyOtherItemsとMySocks、MyUnderPantsなどで機能します。
これは可能ですか?