2013-08-29 2 views
1

에 전달하는 것은 꽤 기본이지만 확실한 방법을 구축하는 데 어려움이 있습니다. 내 DBContext 클래스 (IDbSet<Person>, IDbSet<Organizations> 등)에 선언 된 수많은 인터페이스가 있습니다. 나는 그들을 처리 할 방법으로 그들을 전달하고 싶다. 이 경우 레코드를 삭제합니다. 이것이 내가 시도한 것이지만 메서드 서명을 만드는 방법을 알 수 없습니다.IDbSet <class>을 일반 메서드

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

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

답변

6

여기에는 두 가지 유형이 있습니다. 하나는 컬렉션 유형이고, 다른 하나는 컬렉션에 포함 된 요소의 유형입니다.

나는 당신이 그것을 할 수있는 가장 간단한 방법은 그

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

에 서명을 변경 제안합니다. 제쳐두고, ICollection<T>에 대한 이유는 Remove 방법을 노출하는 간단한 인터페이스, 그리고 IDbSet 내가 생각할 겁니다 그 인터페이스를 구현하는이므로 그렇지 않으면

private static void EmptyTable<T,E>(ContactContext context, T records) 
    where T : IDbSet<E> 

처럼 더 사치스러운 일을해야합니다.

는 IDbSet가 ICollection를 구현하지 않습니다 밝혀, 그래서 ... 당신은 IDbSet

+0

감사를 사용해야합니다! 그게 효과가 있었어. – rsalit