我敢肯定这是很基本的,但是在构造通用方法时遇到了麻烦。我有很多
在我的DBContext
类中声明的接口(IDbSet<Person>
,IDbSet<Organizations>
等)。我想将它们传递给将对其进行处理的方法。在这种情况下,通过删除记录。
这是我试图做的,但是我不知道如何创建方法签名。
private static void EmptyTable<T>(ContactContext context, T records)
{
foreach (var record in records)
{
records.Remove(record);
}
context.SaveChanges();
}
最佳答案
这里的问题是您有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