2014-03-13 2 views
2

저는 Entity Framework 6.0.2를 사용하고 있습니다. 이 오류가 발생하기 전에 이전 버전을 사용하고있었습니다.구체화 된 'System.Int32'형식에서 'System.String'형식으로 지정된 캐스트가 유효하지 않습니다.

기본적으로 모델을 "문자열"속성으로 설정하고 쿼리 또는 저장 프로 시저를 실행하고 결과를 문자열로 덤프합니다. 이는 항상 효과가있었습니다.

수정 방법은 무엇입니까? 전환에 사용할 수있는 '협약'이 아닐까요?

예 :

SQL: 
select ROW_NUMBER() OVER (ORDER BY (select Null)) AS Id, '0', 'Test0', 'some kind of data', 'Test1', 'possibly a datetime type', 'Test2' 

C#: 
public class SomeModel 
{ 
    public int Id { get; set; } 
    public string Test0 { get; set; } 
    public string Test1 { get; set; } 
    public string Test2 { get; set; } 
} 

Invalid Operation Exception: 
var records = dbContext.Database.SqlQuery<SomeModel>("select ROW_NUMBER() OVER (ORDER BY (select Null)) AS Id, '0', 'Test0', 'some kind of data', 'Test1', 'possibly a datetime type', 'Test2'").ToList();  
+0

문자열 전용 속성이있는 모델을 사용하는 이유는 무엇입니까? – Crono

+0

데이터는 표시 목적으로 만 사용됩니다. 나는 그것을 버리려고 노력하고있다. –

+0

이 때문에 서식이 존재합니다. :) – Crono

답변

2

이 응답 없음 오래된 년이 비록. @Crono가 위에서 말한 의견을 토대로 내 대답을 제공 할 수 있습니다.

기본적으로 문제는 데이터 유형입니다. SQL 결과 집합을 모델에 바인딩하려면 Entity Framework에서 데이터 형식을 SQL에서 .NET으로 변환해야합니다.

글쎄,. NET에서 나는 모든 데이터를 문자열로 처리하기를 원했습니다. 검색되는 데이터의 제안은 웹 페이지 나 파일에 표시되지만 데이터를 표시하지 않기 때문입니다.

모든 결과 열을 varchar로 변환하도록 쿼리를 업데이트해야했습니다. @Crono가 친절하게 설명했던 것은 위의 주석입니다. 데이터/결과를 알 수 없으므로보기가 작동하지 않습니다.

편집 2016년 7월 2일

당신의 가치 캐스트!

select Cast(ROW_NUMBER() OVER (ORDER BY (select Null)) AS Id as int), Cast('0' as varchar(255)), Cast('Test0' as varchar(255)), Cast('some kind of data' as varchar(255)), Cast('Test1' as varchar(255)), Cast('possibly a datetime type' as varchar(255)), Cast('Test2' as varchar(255)) 
관련 문제