У меня есть код повторного ввода кода в моем резервном хранилище 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
является идентичным типом объекта графа, который был отключен и, возможно, обновлением извне. Целью здесь является синхронизация двух графиков объектов, чтобы изменения сохранялись.
Мне нужно передать в _t.MyItems и team.MyItems, где MyItems должны быть genericised так же метод работает для MyOtherItems и MySocks, MyUnderPants и т.д.
Является ли это вообще возможно?
Если мы предположим, что 'MyItems' - это коллекция' T', то все остальные 'T' имеют свойства' Id' и 'ValidTo'? Это похоже на то, чтобы сделать это более общим и работать с разными коллекциями. – Jamiec
Я думаю, вы должны опубликовать это на codereview: http://codereview.stackexchange.com/ – maxbeaudoin
Да, у всех есть Id и ValidTo, но контекст. Entry(). CurrentValues.SetValues () по-прежнему необходимо работать, поэтому интерфейс, основанный только на этих двух свойствах, не будет работать. Хотя я не знаю, как это сделать, я уверен, что мне нужно также передать типы. – Moo