繁体   English   中英

传递IDbSet <class> 通用方法

[英]Passing IDbSet<class> to generic method

我敢肯定这是很基本的,但是我在构造通用方法时遇到了麻烦。 我在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM