2009-12-22 3 views
4

나는이 속성이있는 객체 :linq2sql 이미지 저장 문제

[Column] 
public Binary Image { get; set; } 

객체가 모든이가 OK이지만,이 수정 될 때 내가 SubmitChanges에 예외가 처음으로 저장됩니다

데이터 형식 이미지 및 varbinary (max)는 연산자와 일치하는 에는 호환되지 않습니다.

여기에는 어떤 문제가있을 수 있습니까?

답변

2

예외가 있습니까? 문제는 linq2sql이 실제로 열을 수정하기 전에 열을 수정해야하는지 확인하려고한다는 것입니다. 나는 보통 에 이름이 지정된 UpdateCheck = UpdateCheck.Never 매개 변수를 넣으므로 대개 신경 쓰지 않고 전체 행을 업데이트하는 것이 매우 행복합니다. 내가 항목을 저장할 때 즉, 다음

[Column(UpdateCheck = UpdateCheck.Never)] 

은, 난 그냥 이렇게 :

Table<TEntity> da = MyDataContext.Context.GetTable<TEntity>(); 

if (entity.Id > 0) 
    da.Attach(entity, true); 

else 
    da.InsertOnSubmit(entity); 

da.Context.SubmitChanges(); 
+0

-1 걱정할 필요는 없지만 사용자는 그렇게 할 가능성이 있습니다. –

+0

왜 마크? 대부분의 경우, 그들은 정말로 상관하지 않습니다. 내 경우에는 내 저장 메소드가 확장 메소드이므로 인스턴스가 있어야합니다. 방금 객체를 가져 와서 저장 한 경우 이미 그 행에 동일한 값을 다시 넣으면 아무도 신경 쓰지 않습니다. 모든 엔티티 테이블에 시간 소인 필드를 추가하지 않는 한 더 효과적입니다. –

+0

왜? 사용자가 화면에서 일부 데이터를 가져 와서 해당 데이터로 작업하고 저장합니다. 5 분 후에 그 또는 그녀가 만든 변경 사항이 사라 졌다는 사실이 밝혀졌고 문제가되지 않는다고합니다? 그 사용자는 동의하지 않을 것입니다. –

0

난 당신이 기본으로 SQL에 LINQ에서 낙관적 Concurreny 동작을 (실행 할 수있다 생각 LINQ to Entities는 같은 방식으로 작동합니다).

달리 언급하지 않는 한, 행을 업데이트하기 직전에 행의 모든 ​​열의 이전 값에 대해 SELECT 문을 실행하여 다른 사람이 변경 사항을 메모리에 유지하는 동안 수정했는지 확인합니다.

그러나 두 바이너리 인스턴스를 비교하는 방법을 알지 못하는 것 같습니다.

  • 낙관적 해제

    • 이 (를 선호) 지정된 타임 스탬프 열을 기준으로 행 버전을 식별하여 낙관적 동시성을보다 명시 적 버전을 사용하십시오 :이 경우

      , 당신은 두 가지 옵션이 있습니다 동시성

    여기에 LINQ to SQL에 대한 documentation for Optimistic Concurrency이 있습니다.

  • +0

    왜 downvote? 이유없이? –

    0

    잠시 뒤로 물러나십시오. 어떻게이 변수를 비교하고 있습니까?

    이미지의 해시를 계산하고 있습니까? 해시를 비교하는 것은 이미지 바이트를 바이트로 비교하는 것보다 훨씬 낫습니다.