我开发了一个Asp.net应用程序,它使用Entity框架连接到Sql Server 2008(而非R2)数据库。
客户端针对Sql server 2008 R2 数据库运行db脚本并成功执行
执行应用程序时会抛出异常:
“Sysutcdatetime”不被视为内置功能
检查堆栈跟踪后,似乎在执行LINQ to Entity框架语句时抛出异常。声明是这样的:
var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > DateTime.UtcNow);
据我所知,Entity框架生成的sql语句使用函数Sysutcdatetime来获取当前的UTC日期和时间。
我知道其中一个解决方案是将日期存储在变量中,而不是将其传递给lambda表达式,这样就可以在应用程序级别确定UTC日期和时间,并在生成的sql语句中进行硬编码。
var currentUtcDate = DateTime.UtcNow;
var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > currentUtcDate);
但我很好奇为什么Sysutcdatetime函数存在于Sql server 2008中而不存在于Sql server 2008 R2中?
答案 0 :(得分: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版权所有(c)Microsoft 公司开发人员版 Windows NT 5.1(Build 2600: Service Pack 3)
据我所知,Sysutcdatetime仍然存在于SQL Server 2008 R2上
答案 1 :(得分:0)
思想: