1

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

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

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

1 回答 1

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

于 2013-08-29T15:25:50.793 回答