2014-12-28 3 views
2

입력 오류를 변환 할 수 없습니다. 나는이 방법으로 내가 원하는 것을 분명히 생각하지만 내 실수는 무엇인지 모르겠다. ...암시 나는 내 일반적인 방법으로 문제가 일반적인 방법

도움과 새해 복 많이 받으셔서 감사합니다!

+0

'고객'과 '기사'모두 클래스입니까? –

+0

정적 인 방법이 아니라는 것을 알 수 있습니까? – niceman

+0

안녕하세요 맥스, 네, 그들은 수업입니다. – GrayFox

답변

7

기본적으로 사용자의 메서드는 일반적이지 않으며 일반화하지 않으려 고합니다. 가능한 모든 코드를 T에 하드 코딩하지 말고, 코드 T이 무엇인지 신경 쓰지 마십시오. 이 경우 Entity Framework를 사용한다고 가정하면

public ReadOnlyObservableCollection<T> GetReadOnlyObjectsFromDB<T>() 
    where T : class 
{ 
    return new ReadOnlyObservableCollection<T>(dbContext.Set<T>().Local); 
} 

다른 ORM과 비슷한 기능을 수행 할 수 있습니다. dbContext을 올바른 컬렉션에 T 매핑에 대해 걱정 시키십시오. 걱정할 필요가 없습니다.

또한 new ObservableCollection<T>(o)o의 항목을 새 목록에 복사하지만 o의 변경 사항은 추적하지 않습니다. 다행히도 Entity Framework는 이미 사용할 수있는 엔터티에 대한 변경 내용을보고하는 ObservableCollection<T>을 이미 제공합니다.

dbContext.Set<T>T이 참조 유형으로 필요하다는 간단한 이유 때문에 T이 참조 유형이어야한다고 명시해야합니다.

+0

이 접근법을 시도하면이 오류가 발생합니다. 'T'형식을 'TEntity'매개 변수로 사용하려면 참조 형식이어야합니다. 'System.Data.Entity.DbContext.Set () ' – GrayFox

+0

@GrayFox'T : class'가 없습니다. 나는 처음에 그걸 놓쳤지 만 이미 나의 대답에 그것을 추가했습니다. – hvd

1

당신이 취하는 접근법은 좋지 않습니다.하지만 컴파일러가 원하는 것을하기 위해 컴파일러는 결과 항목을 T가 아닌 다른 방법으로 캐스팅해야합니다 :

if (typeofT.GetType() == typeof(Customer)) 
    return new ReadOnlyObservableCollection<T> 
       (new ObservableCollection<T>(dbContext.Customers.Cast<T>())); 
+0

고마워요. 지금 제 실수를 이해합니다. 하지만 난 hvd의 접근 방식을 사용하기로 결정했습니다. – GrayFox

관련 문제