문제

좋습니다. 저는 SQL Server Express 2008과 .Net 3.5(c#)를 사용하고 있습니다.

데이터베이스에 몇 개의 날짜/시간 필드가 있고 행을 편집하려고 합니다(Linq-to-Sql 사용). "행을 찾을 수 없거나 변경되었습니다."라는 오류가 나타납니다.

생성된 SQL을 가져오는 데 시간이 좀 걸렸는데 날짜/시간에 연결된 밀리초 때문에 문제가 발생한 것 같습니다.

작동하지 않는 생성된 SQL,

 @p5: Input DateTime (Size = 0; Prec = 0; Scale = 0) [20/10/2009 16:04:45]
 @p6: Input DateTime (Size = 0; Prec = 0; Scale = 0) [23/10/2009 10:15:36]
 @p7: Input DateTime (Size = 0; Prec = 0; Scale = 0) [23/10/2009 09:27:27]

AND ([SignUpDate] = @p5) 
AND ([LastActivityDate] = @p6) 
AND ([LastLoginDate] = @p7) 

내가 직접 수정하면 작동합니다.

 @p5: Input DateTime (Size = 0; Prec = 0; Scale = 0) [20/10/2009 16:04:45.390]
 @p6: Input DateTime (Size = 0; Prec = 0; Scale = 0) [23/10/2009 10:15:36.733]
 @p7: Input DateTime (Size = 0; Prec = 0; Scale = 0) [23/10/2009 09:27:27.747]

AND ([SignUpDate] = @p5) 
AND ([LastActivityDate] = @p6) 
AND ([LastLoginDate] = @p7) 

이 문제를 해결할 수 있는 방법은 무엇입니까?

이것을 추가하려면 내 편집 코드가 필요합니다.

var UserToEdit = this.GetUser(UserId);

UserToEdit.Forename = Fields["Forename"];
UserToEdit.Surname = Fields["Surname"];
UserToEdit.DateOfBirth = Convert.ToDateTime(Fields["DateOfBirth"]);
UserToEdit.DisplayName = Fields["DisplayName"];
UserToEdit.TelephoneNumber = Fields["TelephoneNumber"];

_db.SubmitChanges();
도움이 되었습니까?

해결책

이 링크를 참조하십시오.

System.data.linq.changeconflictexception : 행을 찾거나 변경하지 않습니다

# High precision datetime fields are used. The solution is to set

DBML 파일에 해당 열을 절대로 업데이트하십시오

이것은 내 문제를 해결했지만 해킹처럼 느껴집니다.

나는 다른 사람들의 생각을보기 위해 이것을 열어두고 있습니다.

다른 팁

확인하다 이 게시물, DateTime 열을 주시하고 DBML과 데이터베이스 간의 다른 데이터 유형을 확인하고 마지막으로 LINQ 낙관적 동시성 접근법을 설명해야한다고 설명합니다.

where foo.SignupDate >= signUpDate
  && foo.SignUpDate < signUpDate.AddSeconds(1)
  && foo.LastActivityDate >= lastActivityDate 
  && foo.LastActivityDate < lastActivityDate.AddSeconds(1)
  && foo.LastLoginDate >= lastActivityDate 
  && foo.LastLoginDate < lastActivityDate.AddSeconds(1)

귀하의 예에서 유일한 차이점은 밀리초이므로 SQL 프로파일러를 사용하여 원래 Select가 밀리초를 반환하는지 확인합니다.그런 다음 해당 문제를 해결할 수 있는지 확인하세요.행 데이터에 밀리초가 포함되어 있지만 선택 항목이 이를 반환하지 않는 것 같습니다.

그렇게 한 후에도 문제가 계속 발생하면 다음 단계가 무엇인지 확인할 수 있습니다.

기본적으로 MSSQL 스키마 및 LINQ 데이터 컨텍스트는 언급 된 구성에서 잘 작동하지 않습니다. DB 스키마 또는 데이터 컨텍스트를 변경할 수 있습니다.

MSSQL 데이터 유형을 변경합니다

우리는 사용 중입니다 작은도 대신에 날짜 시간 언제 1 분의 정확도 사용할 수 있습니다.

LINQ를 SQL 데이터 컨텍스트로 변경하십시오

1 분보다 높은 정확도가 필요하면 Liamb 자신의 답변을보십시오. UpdateCheck을 절대로 설정하지 마십시오 데이터 컨텍스트의 열에 대해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top