2011-08-16 3 views
0

generics와 함께 .NET Enterprise Library의 ExecuteSprocAccessor 메서드를 사용하여 한 클래스를 사용하여 데이터베이스의 모든 CRUD를 처리하려고합니다. 내 데이터 레이어에서, 나는이 같은 노력했다 :generics와 함께 Enterprise Library의 ExecuteSprocAccessor 메서드 사용

'T'해야합니다 그러나

public static class CRUDDatabase 
{ 
    private static Database db = DatabaseFactory.CreateDatabase("ITS"); 

    public static T SelectSingle<T>(string sprocName, int id) 
    { 
     return db.ExecuteSprocAccessor<T>(sprocName, id).First(); 
    } 
} 

을, 나는 내용의 SelectSingle() 메소드의 리턴 라인에 빌드 오류 매개 변수가없는 생성자를 사용하는 추상 형식이 아니고 일반 형식 또는 메서드의 매개 변수 'TResult'로 사용하려면 'Microsoft.Practices.EnterpriseLibrary.Data.DatabaseExtensions.ExecuteSprocAccessor (Microsoft.Practices.EnterpriseLibrary.Data 데이터베이스, 문자열, params 개체 []) '

SelectSingle() 메서드 뒤에있는 아이디어는 저장 프로 시저 이름과 데이터베이스에서 원하는 개체의 레코드 ID를 전달한다는 것입니다. 결국 SelectAll(), Update(), Delete() 등을 사용하게 될 것입니다. 이러한 메서드의 매개 변수는 다를 수 있지만 달성하려는 작업에 대한 아이디어를 얻을 수 있습니다.

오류를 읽은 후, 이것이 불가능할 수도 있다고 생각하기 시작했습니다. 그러나 이것이 작동하는지 알 수 있습니까? 또한 데이터베이스의 내 필드는 내 클래스의 필드와 1 : 1로 일치하므로 모든 매퍼를 지정하지 않습니다. 뭐가 잘못

감사

답변

3

컴파일러가 당신을 말하고있다 : 그것은 그것에 제로 인수 public 생성자를 가지고 유형을 기대합니다. 당신이 넘겨 준 것은 T입니다. 어떤 보장도 할 수 없으므로 컴파일되지 않습니다.

일반 제약 조건을 추가하여 T 유형을 제한해야합니다. 다행히, 그 사소 쉽게 :

컴파일러 "여기 해야 전달 된 모든 유형을 알려줍니다
public static T SelectSingle<T>(string sprocName, int id)  
    where T : new() // <---- here's the constraint 
{ 
    return db.ExecuteSprocAccessor<T>(sprocName, id).First();  
} 

가 0 인수 생성자가 트릭 덕분에 크리스를했다 굉장

+0

을,... – ryanulit

관련 문제