2014-03-05 2 views
1

SQL 속성에 Linq를 기존 클래스에 추가합니다 (속성의 데이터 유형을 변경하기위한 급변 변경) 나는 ColumnAttribute의 저장 매개 변수를 지정하면 백업 필드와 직접 상호 작용하는 SQL 비트에 Linq에 지시 것이라고 생각 않았다, 그래서 나는 다음과 같은 뭔가 일을 기대 :Nullable 필드를 코드의 첫 번째 nullable 속성으로 장식하기 Linq to SQL

Private _foo As Integer? = 0 
<Column(CanBeNull:=True, DbType:="INT", Name:="FooBar", Storage:="_foo")> _ 
<DefaultValue(0)> _ 
Public Property Foo() As Integer 
    Get 
     Return If(_foo.HasValue, _foo.Value, 0) 
    End Get 
    Set(ByVal Value As Integer) 
     _foo = If(Value = 0, New Integer?(), Value) 
    End Set 
End Property 

을 한번 소용돌이를 제공 한 후 기본형 :

MyThing target = (from u in context.MyThings select u).First(); 
나는이 실패 찾는거야

과 :

System.InvalidOperationException : 널 (null) 값이 아닌 널 (NULL) 값 유형입니다 종류 선택 System.Int32와 멤버에 할당 할 수 없습니다 ..

그래서 기존 코드를 변경하여 LINQ에서 SQL로 작업 할 수 있습니까? 아니면 LINQ to SQL 버전에 대해 중복 속성을 추가해야합니까?

+0

오류가 꽤 설명이 보인다 : 당신이 널 (NULL) 정수 nullable이 아닌 정수가 예상된다 ('_foo')를 사용하고 있습니다. 올바른 유형 (예 : '정수'대신 '정수') 만 고려하십시오. – varocarbas

+0

@varocarbas 다른 방법으로 오류가 발생합니다. 데이터베이스의 열은 null입니다. 내 후원 필드가 nullable이며, 내 속성이 아닙니다 (nullable 백킹 필드를 null이 아닌 유형에 기꺼이 매핑 함) –

+0

글쎄 ... 당신의 질문에서 무엇이 무엇인지 분명하지 않습니다. 하지만 내 제안의 요점은 어쨌든 유지됩니다. 올바른 유형에만 의존하십시오. nullable이거나 nullable이 아닌 모든 것. 포인트 어드 바이스를 더 원하면 쉽게 재현 할 수있는 샘플을 게시하여 모든 사람들이 문제를 올바르게 이해할 수 있도록해야합니다. – varocarbas

답변

-2

봅니다 ....

If(IsNothing(_foo), 0, _foo.Value) 
+0

해당 필드의 DB에 기본값 0을 설정할 수도 있습니다. 그런 다음 전역 업데이트를 수행하고 모든 Null을 0으로 변경하십시오. – Mych

+0

이것은 Linq를 통해 DB에서 SQL로로드 할 때 런타임 오류이며 컴파일 시간 문제는 아닙니다 –

관련 문제