2011-09-20 5 views
1

자, 열거 형이 맞습니까?LinqToSql InvalidCastException

public enum BrandSafe : short 
    { 

     Yes = 1, 
     No = -1, 
     Unknown = 0 

    } 

근거가있는 데이터 유형은 짧고 OK입니다. 여기

테이블입니다 : 이제

enter image description here

, 여기에 DTO 클래스입니다 : 나는 '

 List<VurlRow> vurls = (from vurl in m_Context.Vurls 
        select new VurlRow() 
           { 
            BrandSafe = (Enums.BrandSafe)vurl.BrandSafe, 
            VurlRMXID = vurl.VurlRMXID, 
            VurlString = vurl.VurlString 

           }).ToList(); 

: 마지막으로

public class VurlRow 
{ 

    public long VurlRMXID { get; set; } 
    public string VurlString { get; set; } 
    public Enums.BrandSafe BrandSafe { get; set; } 


} 

, 여기에 LINQ 방법입니다 또한 시도 (Enums.BrandSafe) Enum.ToObject (typeof (Enums.BrandSafe), vurl.BrandSafe) 생산 Enum. BrandSafe = (Enums.BrandSafe) vurl.BrandSafe 줄을 제거하면 호출이 작동하지만 줄에서는 InvalidCast 예외가 발생합니다.

"지정된 캐스트가 유효하지 않습니다."

마치 내게 완전히 유효해야하지만, 내가 아는 것은 enum과 linq에 대한 것만으로는 충분하지 않은 것처럼 보인다.

+0

사용해보기'(Enums.BrandSafe) (짧은) vurl.BrandSafe' – Dyppl

+0

vurl.BrandSafe는 짧습니다. – cerhart

+0

전체 예외 메시지를 제공 할 수 있습니까? – Dyppl

답변

3

BrandSafe은 데이터베이스에서 tinyint입니다. tinyint은 이 아니라 byte으로 매핑됩니다. 그것이 문제이다. 그것을 확인 :

public enum BrandSafe : byte 
{ 
    Yes = 1, 
    No = -1, // <====== see below 
    Unknown = 0 
} 

그러나

(shortsmallint에 매핑하는 것) !!!! -1은 실제로 의 유효한 값이 아니며byte/tinyint 인 경우 - 확인 또는 확인되지 않은 컨텍스트인지 여부에 따라 .NET에서 255 또는 OverflowException이고 산술 오버플로 (오류 220) 데이터베이스에서.

하지만 bool? (C#) 및 bit null (TSQL)이 더 잘 일치하는지 궁금합니다.

+0

물론! 이런! DBML에서 변경했지만 테이블을 변경하는 것을 잊었을 것입니다. 도움을 주셔서 감사 드리며, 저를 바보처럼 느끼게 해 주셔서 감사합니다. – cerhart

+0

@cerhart 또한 마지막 줄을 보았습니다. –

+0

맞습니다. 아주 작은 int로 만들었지 만 -1로 값을 사용하기로 결정했습니다. , 나는 DBML을 짧게 변경했지만 테이블 값을 small int로 설정하는 것을 잊어 버렸습니다. 그런 다음 나는 그 표를 보려고 거부했다. 선택적 실명. – cerhart