EntityFrameworkを使用してSQLServer2008(R2ではない)データベースに接続するAsp.netアプリケーションを開発しました。
クライアントは、SQL Server 2008 R2データベースに対してdbスクリプトを実行し、正常に実行されました。
アプリケーションが実行されると、例外がスロー
されます。「Sysutcdatetime」は組み込み関数として認識されません。
スタックトレースを確認した後、LINQtoEntityフレームワークステートメントが実行されると例外がスローされるように見えました。ステートメントは次のようなものです。
var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > DateTime.UtcNow);
私が理解している限り、Entity Frameworkから生成されたSQLステートメントは、関数Sysutcdatetimeを使用して、現在のUTCの日付と時刻を取得します。
解決策の1つは、日付をラムダ式に渡すよりも変数に格納することです。そうすれば、UTCの日付と時刻がアプリケーションレベルで決定され、生成されたSQLステートメントにハードコードされます。
var currentUtcDate = DateTime.UtcNow;
var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > currentUtcDate);
しかし、なぜ関数SysutcdatetimeがSQL Server 2008に存在し、SQL Server 2008 R2には存在しないのか興味がありますか?