2009-07-06 2 views
3

내가 RANDOM 코드의 라인을 다음 오류 (1 100 페이지가로드)이 있습니다LINQ : 지정한 캐스트가 잘못되었습니다

topic = TopicsContext.GetCurrentDataContext().tTopics.Where(t => t.ContentId == contentId).SingleOrDefault(); 

모두 콘텐츠 ID 속성을하고 conntentId 지역 변수가 길다.

가장 중요한 오류는 임의로 발생하며 대부분의 경우 오류가 발생합니다. 당신의 아이디어

에 미리

덕분에 여기에 전체 예외 정보입니다 :

Error Message: Specified cast is not valid. 
Error Source: System.Data.Linq 
Error Stack Trace: 
    at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) 
    at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) 
    at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) 
    at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression) 
    at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source) 
    at Topics.BusinessLogic.Models.Services.TopicService.GetTopic(String title) in C:\rabota\topics\source\trunk\Topics.BusinessLogic\Models\Services\TopicService.cs:line 65 
+0

생성 된 SQL의 모양은 무엇입니까? –

+2

정말 무작위로 동일한 데이터를 여러 번 선택하여 다른 결과를 얻을 수 있습니까? – Geoff

+0

ContentId가 외래 키입니까? 그리고 만약 그렇다면 null 일 수 있습니까? –

답변

0

나는 그것이 "SingleOrDefault()"메서드 호출에서 발생 생각합니다. 그것은 무엇입니까? (t.contentId)가 존재한다면 (그것은 유일한 키 여야합니다, 그렇습니까?), contentId가 데이터베이스에 존재하지 않으면 Default 값이 반환 될 것입니다. "default"에 의한 디폴트 값은 null이 될 것이고, 이는 할당 (=)의 오른쪽이 널 (null)이 될 것이며 널 (null)을 long으로 형변환하려는 것을 의미합니다.

long? topic = .... 

을 아니면 내가 "싱글()"를 사용하지 상황이 존재하는 키를 돌봐의 try catch 블록으로 포장됩니다

솔루션의 경우, 널 (NULL) 형식으로 귀하의 항목을 설정할 수 있습니다.

어쨌든 프로그램에 임의의 오류가 있어서는 안됩니다.

+0

아니요, 주제가 tTopic이며 길지 않습니다. longs는 ContentId 및 contentId입니다. –

+0

다음 번에 예외가 발생하면 try catch를 추가하고 모든 정보를 인쇄합니다. –

+0

오, 미안 해요. 그래도 존재하지 않는 콘텐츠 ID를 삽입하고 어떤 일이 발생하는지 확인하십시오. 단일 기본 오류로 인해 오류가 발생할 수 있는지 확인하고 싶습니다. – xandy

3

DB의 한 버전으로 LINQ-to-SQL 래퍼를 생성하고 다른 버전의 DB에 대해 사용하려고했을 때이 문제가 발생했습니다. 필자의 경우에는 short로 정의 된 열이 long으로 변경되었으며 long으로 변환 할 수없는 DB에서 값이 나왔습니다. LINQ-to-SQL 래퍼 및 데이터베이스 테이블이 동기화되어 있는지 확인하십시오.

관련 문제