SQLサーバーが現在の時刻を取得する方法とc#コンパイラが現在の時刻を取得する方法は異なる可能性がありますか?
SQL Serverテーブルにトリガーがあり、更新のたびにupdateDatetime列が現在の日時に更新されます。
私はこの現在の日時を次のように取得しますcurrent_timestamp
このデータベースに接続し、ネイティブSQLを使用してテーブルを更新するac#コードもあります。この後、トリガーが作成されます。
問題は、更新を行うNUnitでテストを実行してから、変更された行を取得することです。テストの開始時にupdatedDatetimeを現在のものと比較すると、それらは異なります。私はこれをDateTime.UtcNow
違いはミリ秒単位ですが、面白いのは、テストの最初からの1つが、トリガーからの1つの後に発生することです。それは意味がありません。
ここに私が言っていることを説明するためのいくつかのコードがあります
DateTime dateTimeBefore = DateTime.UtcNow;
// Act
bookDao.Update(book);
// Assert
alteredBook = bookDao.GetByKey(bookingDao);
Console.WriteLine("dateTimeBefore: {0} - {1}", dateTimeBefore, dateTimeBefore.Millisecond);
Console.WriteLine("UpdateDateTime: {0} - {1}", alteredBook.UpdatedDateTime, alteredBook.UpdatedDateTime.Millisecond);
Assert.IsTrue(alteredBook.UpdatedDateTime >= dateTimeBefore);
これがトリガーになります
update Book
set UpdatedDatetime = current_timestamp
from inserted
where inserted.Id = Booking.Booking.Id