将IDbSet <class>传递给泛型方法</class>

时间:2013-08-29 15:18:37

标签: c# .net entity-framework c#-4.0 generics

我确信这是非常基本的,但我在构建泛型方法时遇到了麻烦。我有很多 在我的DBContext类(IDbSet<Person>IDbSet<Organizations>等中声明的接口。我想将它们传递给一个处理它们的方法。在这种情况下,删除记录。 这是我试图做的,但我无法弄清楚如何创建方法签名。

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

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

1 个答案:

答案 0 :(得分: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