我确信这是非常基本的,但我在构建泛型方法时遇到了麻烦。我有很多
在我的DBContext
类(IDbSet<Person>
,IDbSet<Organizations>
等中声明的接口。我想将它们传递给一个处理它们的方法。在这种情况下,删除记录。
这是我试图做的,但我无法弄清楚如何创建方法签名。
private static void EmptyTable<T>(ContactContext context, T records)
{
foreach (var record in records)
{
records.Remove(record);
}
context.SaveChanges();
}
答案 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