質問

OK、SQL Server Express 2008と.Net 3.5(c#)を使用しています

データベースにいくつかの日時フィールドがあり、行を編集しようとしています(Linq-to-Sqlを使用)エラー" Row not found or changed.quot;

生成されたSQLを取得するのに少し時間を費やしましたが、問題はdatetimeに付加されたミリ秒に起因するようです。

動作しない生成された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
     

UpdateCheckをその列に適用しない   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)

例の唯一の違いはミリ秒であるため、元のSelectがミリ秒を返すかどうかを判断するためにSQLプロファイラーを使用します。次に、その問題を修正できるかどうかを確認します。行データにはミリ秒が含まれているようですが、selectはそれらを返していません。

それを実行しても問題が解決しない場合、次のステップがどうなるかを確認できます。

基本的に、MSSQLスキーマとLinqデータコンテキストは、上記の構成では正常に動作しません。 DBスキーマまたはデータコンテキストを変更できます。

MSSQLデータ型の変更

smalldatetime を使用しています代わりに datetime の場合、 1分の精度を使用できます。

LINQ to SQLデータコンテキストの変更

1分以上の精度が必要な場合は、 UpdateCheckをNeverに設定するためのLiamBの回答をご覧ください。データコンテキスト。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top