반응형
"유형 'T'가 참조 유형이어야 할 때"메소드를 제네릭으로 만드는 방법은 무엇입니까?
거의 동일한 두 가지 저장소 방법이 있습니다.
public IList<Fund> GetFundsByName(int pageSize, string searchExpression)
{
return _session.CreateCriteria<Fund>()
.AddNameSearchCriteria<Fund>(searchExpression)
.AddOrder<Fund>(f => f.Name, Order.Asc)
.SetMaxResults(pageSize).List<Fund>();
}
public IList<Company> GetCompaniesByName(int pageSize, string searchExpression)
{
return _session.CreateCriteria<Company>()
.AddNameSearchCriteria<Company>(searchExpression)
.AddOrder<Company>(f => f.Name, Order.Asc)
.SetMaxResults(pageSize).List<Company>();
}
유일한 차이점은 첫 번째 _session.CreateCriteria
는 유형 Fund
이고 두 번째는company
메서드 정의를 다음과 같이 변경하여이 제네릭을 만들 수 있기를 바랐습니다.
public IList<T> GetEntitiesByName<T>(int pageSize, string searchExpression)
where T : ISearchableEntity
{
return _session.CreateCriteria<T>()
.AddNameSearchCriteria<T>(searchExpression)
.AddOrder<T>(f => f.Name, Order.Asc)
.SetMaxResults(pageSize).List<T>();
}
여기서 ISearchableEntity는 다음과 같이 정의됩니다.
public interface ISearchableEntity
{
string Name { get; set; }
}
그러나 불행히도 NHibernate는 이것을 좋아하지 않으며 나에게 오류를 제공합니다.
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic type or method 'NHibernate.ISession.CreateCriteria<T>()'
이 일반적인 방법을 다른 방법으로 만들 수 있습니까?
제약 조건을 추가해 볼 수 있습니다 class
.
where T : class, ISearchableEntity
다음은 T에서 사용할 수있는 제약 조건의 전체 목록입니다.
반응형
'program story' 카테고리의 다른 글
시간 범위 내에서 5 분 간격으로 그룹화 (0) | 2020.10.11 |
---|---|
DateTime을 웹 UTC 형식으로 어떻게 포맷 할 수 있습니까? (0) | 2020.10.11 |
Android : 프로그래밍 방식으로 Java 코드에서 Spinner 채우기 (0) | 2020.10.11 |
구분되지 않는 공백이있는 ReactJS 렌더링 문자열 (0) | 2020.10.11 |
createClob () 메서드로 인해 컨텍스트 LOB 생성을 비활성화하면 오류가 발생했습니다. (0) | 2020.10.11 |