엔티티 프레임 워크를 사용하여 엔티티 프레임 워크를 사용하여 데이터베이스에 엔티티를 저장합니다. 저장소 패턴을 사용하여 매우 복잡한 Linq 쿼리를 래핑합니다. 우리는 단순한 메모리 콜렉션에 대해 이러한 쿼리를 단위 테스트하고 싶습니다. 이것은 SQL 형식의 rowversion을 사용하여 집합에서 마지막으로 추가 된 레코드를 찾기 위해 쿼리를 실행하기 전까지 훌륭합니다. EntityFramework는이 Linq를 SQL로 변환 할 수 있습니다.Linq 쿼리에서 Sql 버전 및 C# 바이트 배열을 처리하는 방법
행 버전은 개체가 데이터베이스에서 다시 수화 될 때 ulong (?)에 맞게 너무 커서 C#에 의해 바이트 배열로 변환됩니다.
그래서이 바이트 배열을 메모리 테스트 데이터에 추가합니다. 그러나 메모리 집합에 대해 쿼리를 실행하면 Linq가 바이트 배열로 폭발하므로 비교할 수 없으므로 필요한 정렬을 수행 할 수 없습니다.
바이트 배열에서 작동하는 비교자를 작성했습니다.이 비교자를 쿼리에서 사용하면 메모리에서 정상적으로 작동합니다.
하지만 이제 LinqToEntities는 비교 자로 쿼리를 처리 할 수 없습니다.
우리는 캐치 (22)에 갇혀 것 같다 ...
는 메모리와 LinqToEntities에서 작동하는 솔루션을 사람을 했습니까?
당신이 된 IQueryable와 메모리 수집에 포장하는 경우와 로직을 테스트하는 데 사용하는 DB와 같은 다른 IQueryable 소스에 대해 실행하려고합니다. 테스트가 좋지 않고 아무것도 증명하지 못하는 이유는 그들이 다르게 작동한다는 것을 알기 때문입니다. 동일한 표현식은 논리적으로 동일하지 않을 수도 있습니다 (특히 널을 포함하는 경우). – Mant101
나는 동일하지 않다는 것에 동의하지만, 우리는 우리의 왼쪽 조인이 널을 처리 할 수 있도록주의를 기울인다. 그리고 아직 배포 된 DB에 대해 테스트 세트를 실행합니다. 하지만 4000 개의 테스트를 모두 거치면 빌드 서버가 다운됩니다. –