データベース用のAzure SQL Serverのインスタンスを持つAzure AppサービスでMVCコアWebアプリケーションを実行しています。Entity Framework + Azure、ウェブアプリケーションと異なるタイムゾーンにあるデータベース
私はAzure Portalを使ってAppサービスのタイムゾーンをCESTに変更しました.CESTは現在GMT + 2です。
データベースは北ヨーロッパのAzureにありますが、データベースのタイムゾーンがわかりませんが、GMTやBritish Summer Timeの可能性が最も高いです。
私の日付は単純なdatetime2値として保存されます。つまり、TimeZone情報がありません。これは、データベース上の(メモリではなく)日付を比較するクエリを実行するたびに、クエリが不正な結果を返すことを意味します。
私はEntity Framework Core(7)を使用してデータベースからクエリを実行しています。
過去のイベントを返すことになっているクエリの例が、最後の2時間からのイベントは含まれません。これを引き起こしている正確に何
private IOrderedQueryable<Event> GetPastEvents()
{
var result = _dbContext.Events
.Where(t => t.DateTime < DateTime.Now)
.OrderByDescending(e => e.DateTime);
return result;
}
を? これに対処する最も良い方法は何ですか?
アプリケーションコードとSQLクエリがないと手助けできません。何が問題を引き起こしていますか?なぜデータベースの*時間*は保存された値に関係しますか?おそらくアプリケーションとデータベースのローカルとUTC時間を混在させていますか?実際の修正はもちろん、データベース*および*アプリケーションでDateTimeOffsetを使用することです。 ** ** UTC時刻のみを保存し、SQLでUTC関数を呼び出します。 'GETDATE()'の代わりに 'GETUTCDATE()'を使います。 –
これは、UnicodeとANSIの質問との違いは何もありません。実際のソリューションは、Unicodeを使用することです。バグの回避策は、コード・ページを修正して、*これがある時点で破損するかどうかを知ることです。 –
あなたの返事をありがとう、私はうまくいってもっと明確に質問を編集しました。 私の推測では、UTC時間と現地時間を混在させていますが、どういうことかはっきりしています。私の最初の考えは、データベースのタイムゾーンを変更することが早急に解決されるということでした。それは可能ですか?理想的には私はUTC時代を保存して作業することになりますが、データモデルを変更してコードを変換してデータを変換する必要があるため、より簡単な回避策を使用することをお勧めします。 – severin