【问题标题】:Passing IDbSet<class> to generic method将 IDbSet<class> 传递给泛型方法
【发布时间】:2013-08-29 15:18:37
【问题描述】:

我确信这是非常基本的,但我在构建泛型方法时遇到了麻烦。我有无数 在我的DBContext 类中声明的接口(@98​​7654322@、IDbSet&lt;Organizations&gt; 等)。我想将它们传递给将处理它们的方法。在这种情况下通过删除记录。 这是我尝试做的,但我不知道如何创建方法签名。

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

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

【问题讨论】:

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


    【解决方案1】:

    这里的问题是您有 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&lt;T&gt; 的原因是它是公开Remove 方法的最简单的接口,而 IDbSet 实现了我认为的那个接口。

    原来 IDbSet 没有实现ICollection,所以...你必须使用IDbSet

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多