2010-03-24 4 views

답변

5

당신은 뭔가 다른 일이 있습니다. 방금 ID (ID), nullable varbinary (MAX), nullable varbinary (MAX) 및 타임 스탬프가있는 작은 샘플 테이블을 만들었습니다. 다음 코드를 사용하면 오류없이 잘 작동합니다.

using (var context = new TestDataContext()) 
{ 
    var binarySample = new BinarySample 
    { 
     Image = null, 
     NonNullImage = new Binary(new byte[0]), 
    }; 
    context.BinarySamples.InsertOnSubmit(binarySample); 
    context.SubmitChanges(); 
} 

여기서이 코드는 ArgumentNullException이 아닌 SQLException을 올바르게 throw (catch)합니다.

try 
{ 
    using (var context = new TestDataContext()) 
    { 
     var binarySample2 = new BinarySample 
     { 
      NonNullImage = null, 
      Image = new Binary(new byte[0]) 
     }; 
     context.BinarySamples.InsertOnSubmit(binarySample2); 
     context.SubmitChanges(); 
    } 
} 
catch (SqlException e) 
{ 
    Console.WriteLine(e.Message); 
} 

은 당신이 경우 ArgumentNullException를 던지고 속성에 대한 SendPropertyChanging 핸들러가 부분 클래스 구현이 가능한가요?

편집 : OP의 의견을 기반으로합니다. 즉, implicit conversion operation를 호출하고 암시 적 변환이 경우 ArgumentNullException을 throw합니다 당신이 직접 바이너리에 입력 바이트 []의 변수를 할당 할 수 없습니다

참고. 값을 할당하려고 시도하기 전에 값이 null인지 확인하고 byte [] 변수가 null 인 경우 null을 할당해야합니다. 나에게 이것은 이상한 행동처럼 보이고 나는 미래에 그것을 바꿀 것이라고 희망한다. MSDN 설명서는 향후 버전에서 일부 변경이 발생할 수 있음을 나타냅니다.

+0

코드 형식을 더 잘 이해하기 위해 내 의견을 게시했습니다 (아래 참조). – Karsten

0

ExecuteQuery() 메서드를 사용하여 고유 한 SQL을 전달할 수 있습니다.

1

필드가 데이터베이스에서 Nullable입니까? 그에 따라 linq 데이터 모델이 업데이트 되었습니까? 속성 기반 매핑을 사용하는 경우 [Column(...)] 속성에 CanBeNull=true 설정이 있어야합니다.

+0

좋은 점을 보지 않는다 업데이트 된 스키마가 변경되도록 '다시 추가'하십시오. – Nate

+0

좋은 점, 열은 null이 가능했습니다. – Karsten

1

@tvanfosson (답변으로 게시 코드의 더 나은 서식을 얻기 위해)

예는 바로, 이상한 일이, 내 C# 지식을 넘어 무언가 진행되고있다.

from.ImageThumbnail는 바이트 [] to.ImageThumbnail 이진이다

사용? 또는 ?? 운영자는 작동하지 않을 것입니다. 난 당신이 Linq2SQL 디자이너에 테이블을 추가 할 때이 널 (NULL) 컬럼으로 정의되지 않은 경우 또한, 당신은 디자이너에서 테이블을 삭제해야합니다, 왜 :-)

  if (from.ImageThumbnail != null) // works 
      { 
       to.ImageThumbnail = from.ImageThumbnail; 
      } 
      else 
      { 
       to.ImageThumbnail = null; 
      } 

      to.ImageThumbnail = from.ImageThumbnail != null ? from.ImageThumbnail : null; // fails 

      to.ImageThumbnail = from.ImageThumbnail ?? null; // fails 
+1

byte []에서 Binary (http://msdn.microsoft. com/ko-kr/library/system.data.linq.binary.op_implicit.aspx)를 사용하여 할당을 처리합니다. 인수가 널인 경우 변환 조작은 예외를 _ 생시킵니다. 이것은 실제로 운영자 설명서에 기록되어 있습니다. 코드의 첫 번째 버전을 고수하십시오. – tvanfosson

+1

FYI - 아마도 질문을 편집하고이 정보를 별도의 대답으로 추가해야합니다. 이렇게하면 같은 문제에 대한 해결책을 모색하는 다른 사람들에게 질문이 더 유용 해집니다. – tvanfosson

+0

정보를 주셔서 감사합니다. – Karsten