2016-06-21 3 views
1

이 ASP.Net 코드가 있는데이를 실행할 때 오류가 발생했습니다. 오류 :.Attach 후에 타임 스탬프 열을 업데이트 할 수 없습니다.

서버 : 메시지 272, 수준 16, 상태 1, 줄 1 타임 스탬프 열을 업데이트 할 수 없습니다. 여기

내가 이미이 테이블의 매핑입니다 :..

속성 (X => x.Version) .HasColumnName (@ "버전") IsOptional() HasColumnType ("타임 스탬프 ") .HasDatabaseGeneratedOption (System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed);

테이블에 버전 열이 있습니다.

public async Task<IHttpActionResult> Put([FromBody]WordForm wordForm) 
    { 
     // SampleSentences -> s 

     var oldsObj = db.SampleSentences 
        .Where(w => w.WordFormId == wordForm.WordFormId) 
        .AsNoTracking() 
        .ToList(); 
     var newsObj = wordForm.SampleSentences.ToList(); 

     // There is other code here to modify SampleSentences 
     // 
     // 

     // db.WordForms.Attach(wordForm); 
     // db.Entry(wordForm).State = EntityState.Modified; 
     wordForm.StatusId = (int)EStatus.Saved; 
     await db.SaveChangesAsync(User, DateTime.UtcNow); 
     return Ok(wordForm); 
    } 

나는 방법의 두 줄에 주석을 추가하여 오류를 해결할 수 있었다. 그러나 누군가 내가 그 라인을 주석 처리하지 않으면 왜 에러가 발생하는지 설명 할 수 있습니다. wordForm을 첨부하고 수정 됨으로 표시 할 수 없습니까?

+0

'timestamp'는'rowversion'의 사용되지 않는 이름입니다. 그것은 시간과 아무런 관련이 없습니다 –

+0

엔티티의 rowversion 속성에'[TimeStamp]'속성을 추가하십시오 –

답변

3

테이블에 낙천적 동시성에 사용되는 rowversion 또는 timestamp 필드가있을 수 있습니다. rowversion 필드를 설정하거나 업데이트 할 수 없습니다. 이들은 행이 수정 될 때마다 자동으로 증가하는 값입니다.

문제를 방지 TimeStamp 속성으로 rowversion 속성을 표시하려면 :

사실
[TimeStamp] 
public byte[] RowVersion { get; set; } 

, timestamp혼란의 조금에서

의 원인이되는 유형의 이름을 더 이상 사용되지이다 docs :

타임 스탬프 구문은 더 이상 사용되지 않습니다. 이 기능은 이후 버전의 Microsoft SQL Server에서 제거 될 예정입니다. 새로운 개발 작업에서는이 기능을 사용하지 말고 현재이 기능을 사용하는 응용 프로그램을 수정하십시오.

+0

질문에 이미 해당 열에 대한 매핑이 표시되어 있으므로 첨부하는 방식에 뭔가 다른 것이있을 수 있습니다. –

관련 문제