我在我的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