우리는 VS 2012와 함께 제공되는 Framework 4.5 및 EF 5.0을 사용하고 있습니다. 동시성 검사에 사용할 RowVersion이라는 열이 포함 된 엔티티가 있습니다. MySQL 테이블의 "Timestamp"값은 레코드를 INSERT 또는 UPDATE 할 때 자동으로 업데이트됩니다.DTO의 Entity Framework 5 동시성 업데이트
내가 동시성 검사를 가능하게하는 "고정"할 수있는 "RowVersion"속성의 동시성 모드를 설정 한Partial Public Class Terminal
Public Property ID As Long
Public Property User_ID As Nullable(Of Long)
Public Property Name As String
Public Property Number As Nullable(Of Integer)
Public Property Location As String
Public Property Description As String
Public Property IsEnabled As Boolean
Public Property RowVersion As Date
Public Overridable Property UserSession As ICollection(Of UserSession) = New HashSet(Of UserSession)
End Class
은 "StoreGeneratedPattern"가 "계산 된"설정 :
기본 EF 5 CODEGEN이 POCO 생성 . 우리는 오토 데스크를 통해 매핑 된 DTO를 사용하여 WCF 서비스를 통해 데이터를 전송합니다.
서비스를 통해 돌아온 엔티티를 업데이트하는 데 문제가 있습니다. 여기에 몇 가지 코드가 있습니다 :
Public Sub SaveTerminal(Term As TerminalDto)
Using db As New PasgaEntities(conString)
Dim tmpTerminal As Terminal = Mapper.Map(Of Terminal)(Term)
db.Terminal.Attach(tmpTerminal)
db.Entry(tmpTerminal).State = EntityState.Modified
db.SaveChanges() 'throws OptimisticConcurrencyException
End Using
End Sub
"rowVersion"이 변경되지 않은 경우에도 항상 OptimisticConcurrencyException이 발생합니다. 이것은 DTO를 다시 Entity에 매핑하여 발생합니까?
누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
안부
데이터베이스에서 행 버전을 어떻게 처리합니까? 날짜가 아니어야합니다. –
RowVersion은 데이터가 채워지거나 수정 될 때마다 자동으로 업데이트되는 타임 스탬프 필드입니다. (http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html) – Scheurich
정수를 사용할 때 수동으로 RowVersion을 증가시켜야한다는 뜻입니까? 아니면 이것을하는 EF입니까? – Scheurich