1

rowversion 또는 timestamp없이 Sql 테이블을 사용하고 있습니다. 그러나 Linq를 사용하여 테이블의 특정 값을 업데이트해야합니다.TimeStamp 및 StoredProcedures가없는 Linq SubmitChanges 사용

Public Sub SaveCustomer(ByVal cust As Customer) 
    Using dc As New AppDataContext() 
     If (cust.Id > 0) Then 
      Dim tempCust As Customer = Nothing 

      Using dc2 As New AppDataContext() 
       tempCust = dc2.Customers.Single(Function(c) c.Id = cust.Id) 
      End Using 

      dc.Customers.Attach(cust, tempCust) 
     Else 
      dc.Customers.InsertOnSubmit(cust) 
     End If 

     dc.SubmitChanges() 
    End Using 
End Sub 

를이 수행하는 동안 : Linq에, 나는 데이터베이스에서 현재 객체를 검색하고 그래서 같은 방법을 첨부 입력으로 데이터베이스와 실제 객체를 모두 사용하는 두 번째의 DataContext를 사용하고 업데이트 할 값 알 수 없기 때문에 작업, 나는 문제가 : 나는 또한 특정 시간에 고객의 일부 필드를 업데이 트 StoredProcedures를 사용하고 있습니다. 다른 고객 필드를

  • 전화 SaveCustomer
  • 를 업데이트 할 새 값

  • 를 사용하여 저장 프로 시저에 고객 필드를 설정 데이터베이스
  • 에서

    1. 가져 오기 고객 : 이제 다음 워크 플로우를 상상 이제 SaveCustomer 메서드는 코드에서 설정된 값을 포함하지 않지만 저장 프로 시저에서 설정 한 값을 포함하는 데이터베이스에서 현재 개체를 검색합니다. 이것을 실제 객체에 첨부하고 제출하면 코드에서 데이터베이스에 설정된 값을 업데이트하고 ... tadaaaa ... 다른 객체는 NULL로 설정합니다. 실제 객체에는 저장 프로 시저.

      이해할 수 있었습니까?

      이 문제를 해결하는 가장 좋은 방법이 있습니까?

  • 답변

    0

    ORM의 뒤에서 변경하고 동시성 검사를 사용하지 않으면 문제가 발생합니다. "3"단계에서 수행 한 작업을 표시하지는 않지만 IMO에서는 OUTPUT TSQL 매개 변수를 사용하여 이러한 변경 사항을 반영하도록 개체 모델을 업데이트해야합니다. 또는; 객체 지향. 동시성 검사없이 아무것도을하고 물론

    는, 데이터가 손실 될 수있는 좋은 방법입니다 - 그래서 내 은 단순히 "는 rowversion을 추가"됩니다 옵션을 선호했다. 그렇지 않으면 아마도 업데이트 된 개체를 읽고 병합 할 수 있습니다. 어떻게 든 올바른 데이터가 무엇인지 추측 할 수 있습니다.

    +0

    확실히 합리적이라고 생각합니다. 그러나 나는 고객의 데이터베이스와 인프라에 맞서 노력하고 있으며, 데이터베이스의 대부분이 동적으로 생성되고 자체 프레임 워크를 사용하여 액세스하기 때문에 rowversionioning을 도입하지 않을 것입니다. 그러나 린크 (Linq)가 무엇인지 보여주기 위해 정적 인 유일한 테이블에 대해 린크 (Linq)와 함께 작업 할 기회를 얻었습니다. ;-) 이제 SP 때문에 문제가 발생했습니다. 이 컨텍스트에서 동시성 검사에 대해 배울 수있는 좋은 소스가 있습니까? – Mephisztoe

    0

    개체를 하나의 컨텍스트에서 연결 해제하고 다른 개체를 사용하여 업데이트 할 경우, 원래 버전의 객체를 유지하거나, 행 버전을 사용하거나, 데이터베이스에 일종의 해싱 루틴을 구현하고 객체의 일부로 해시를 유지해야합니다. 이 중에서도 Rowversion 옵션을 사용하는 것이 좋습니다. 현재 값을 원래 값으로 사용하는 것은 동시성 문제 만 요구하는 것입니다.

    +0

    문제는 - 위에서 언급 한 바와 같이 - 고객 데이터베이스를 대상으로 작업 중이므로 수정할 수있는 옵션이 없기 때문에 rowversioning을 추가 할 수 없습니다. :( – Mephisztoe