0

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には存在しないのか興味がありますか?

4

2 に答える 2

2
select Sysutcdatetime()
select @@VERSION

それをSQL Serverで実行したところ、結果としてこれらが得られました

2010-07-14 19:36:40.5738642

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) 2010 年 4 月 2 日 15:53:02 Copyright (c) Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

私が知る限り、Sysutcdatetime は SQL Server 2008 R2 にまだ存在しています。

于 2010-07-14T19:39:09.660 に答える
0

考え:

  • データベースの互換性レベルとは何ですか?
  • 100% SQL Server 2008 R2 または SQL Server 2008 ですか?
于 2010-07-14T19:50:32.210 に答える