我們正在使用EF 4.0之上的可跟蹤實體。ToList方法不適用於TrackableCollection
爲了刪除一個實體及其所有依賴實體,我正在編寫一個通用的DeleteDependentEntities,以便從EntityManager中的Delete方法中調用。 (我們不希望或不希望依賴CASCADE DELETE來設置數據庫中的關係。)DeleteDependentEntities掃描recursevly受約束的實體集的所有子對象。
爲了保持它的通用性,以便它可以用於整個項目中的所有實體,我正在使用動態類型。
的方法如下:
private void DeleteDependentEntities(dynamic entitySet, dynamic context)
{
if (entitySet != null)
{
foreach (dynamic item in entitySet.ToList())
{
// 1. Scan object for children and delete children
ProcessChildren(item, context);
// 2. Delete this object
context.DeleteObject(item);
}
}
}
它編譯OK,但在運行時我得到以下錯誤:
「SLS.AnimalIntakeMgmt.DataTypes.TrackableCollection」不包含一個定義'ToList'
因此,類型推斷工作正常。 ToList定義的問題很奇怪,因爲TrackableCollection基於ObservableCollection,而ObservableCollection又基於Collection。
ToList是必需的,否則foreach循環會失敗,因爲集合在循環中被修改。
歡迎您提出任何建議!
很好的答案。但是你是對的,原始代碼看起來很糟糕。 –
Thx丹尼爾的提示,它工作正常。之前嘗試了泛型,但在檢索進一步級別調用的類型時遇到了問題。 @Ales:thx分享你的想法,希望你正在寫出完美的代碼。 –
@馬克:請不要忘記接受我的回答:[如何接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –