2010-04-09 3 views
0

나는 다음과 같은 예외를 받고있어 Linq에 엔티티 프레임 워크를 사용하여 일부 데이터를 조회하는 중에 :존재하지 않는 값의 C# Linq 엔터티 변환 오류?

{"Conversion failed when converting the varchar value '3208,7' to data type int."} 

이 값이 심지어 내가에서 쿼리하고 뷰에 존재하지 않는다는 것입니다 혼동되는 것. 그러나 뷰가 기반으로하는 테이블에 존재합니다. 내가 실행 해요 쿼리는 다음 LINQ는 실제보기 대신 기본 테이블을 조회하고, 경우에이 문제를 어떤 방법이 왜

return context.vb_audit_department 
       .Where(x => x.department_id == department_id && x.version_id == version_id) 
       .GroupBy(x => new { x.action_date, x.change_type, x.user_ntid, x.label }) 
       .Select(x => new 
       { 
        action_date = x.Key.action_date, 
        change_type = x.Key.change_type, 
        user_ntid = x.Key.user_ntid, 
        label = x.Key.label, 
        count = x.Count(), 
        items = x 
       }) 
       .OrderByDescending(x => x.action_date) 
       .Skip(startRowIndex) 
       .Take(maximumRows) 
       .ToList(); 

누군가는 설명 할 수 있습니까? 우리는 당신이 우리가 더 LINQ 쿼리가 실행 (및 매핑을 정의하는 방법 EF 또는 LinqToSql 경우)

답변

0

/EF는 하지 쿼리 할 뷰 대신에 기본이되는 테이블 이 정보에 대한 지식이 없습니다.

이 오류는 SQL Server 자체에서 발생합니다. 보기가 특정 행에 대해 실패한 CAST으로 정의 될 수 있습니다. 이 방법으로보기를 정의하는 것이 전적으로 가능하므로 사용자가 SELECT을 시도 할 때만 오류가 발생하므로 정확한 오류 메시지가 표시됩니다.

을 보여주기 위해 :

CREATE TABLE Test 
(
    Value varchar(50) 
) 

INSERT Test (Value) VALUES ('1') 

CREATE VIEW TestView AS 
    SELECT CAST(Value AS int) AS Value 
    FROM Test 

SELECT * FROM TestView -- Succeeds 

INSERT Test (Value) VALUES ('Some String') 

SELECT * FROM TestView -- Will fail with your error message 

그래서 다시,이 나쁜 값이 모든 뷰에 표시되어 있지 않은지 확인 있다면 문제가 뷰 자체 함께 좋은 기회가있다 . EF 매핑이 잘못되었습니다 (즉, 열 중 하나에 대해 잘못된 유형이 정의되어 있음). 또한 EF가 CAST을 삽입하기 때문에 오류가 발생할 수 있습니다.

1

Linq는 SQL에있는 상황에 대해 알아야 할 마지막 질문에 대답하기 전에

관련 문제