2013-08-29 20 views
1

我敢肯定這是非常基本的,但我在構造泛型方法時遇到了困難。我在我的DBContext類(IDbSet<Person>,IDbSet<Organizations>等)中聲明瞭衆多的接口 。我想把它們傳遞給一個可以處理它們的方法。在這種情況下通過刪除記錄。 這是我試圖做的,但我無法弄清楚如何創建方法簽名。傳遞IDbSet <class>到泛型方法

private static void EmptyTable<T>(ContactContext context, T records) 
    { 

     foreach (var record in records) 
     { 
      records.Remove(record); 
     } 
     context.SaveChanges(); 
    } 

回答

6

這裏的問題是,你有2個泛型類型。一個是集合類型,另一個是集合包含的元素的類型。

我建議你改變

private static void EmptyTable<T>(ContactContext context, IDbSet<T> records) 

你的簽名是這樣做的最簡單方法。否則,你就需要做一些更奢侈像

private static void EmptyTable<T,E>(ContactContext context, T records) 
    where T : IDbSet<E> 

順便說一句,對於 ICollection<T>的原因是,它是暴露 Remove方法最簡單的接口,並IDbSet實現該接口我會承擔。

原來IDbSet沒有實現ICollection,所以......你將不得不使用IDbSet

+0

謝謝!這工作。 – rsalit

相關問題