我有一个 LINQ to Entities 应用程序和一个数据库项目来管理面向 .NET 4.0 的 VS 2010 解决方案中的架构。实体模型目前是从数据库进行逆向工程的。其中一个表是用日期时间类型的列定义的。数据库项目配置为使用 SQL Server 2005 兼容模式,因此一切部署正常。
我刚刚遇到一个问题,通过实体框架的更新语句似乎使用 datetime2 而不是 datetime,这会导致异常,因为 SQL 2005 不支持该数据类型:
System.Data.UpdateException: An error occurred while updating the entries.
See the inner exception for details. ---> System.ArgumentException: The version
of SQL Server in use does not support datatype 'datetime2'.
从堆栈跟踪看来,错误似乎发生在以下位置:
System.Data.Mapping.Update.DynamicUpdateCommand
我检查了所有 SQL 代码和实体代码,并确认不存在对 datetime2 的引用(包括 dbschema 文件)。我只能得出结论,该数据类型是在实体框架生成的动态SQL查询中生成的。
我如何确认或否认这一点,以及如何阻止它发生?实体框架不知道我已要求 db 项目以 2005 兼容模式为目标,并且我看不到一种方法来指出它正在查看的版本。无论如何,我在一台安装了 2008 Express 的机器上创建了这个项目,但我会定期切换到另一台没有安装(并且还无法升级)的机器。
您需要更改ProviderManifestToken
在您的 EDMX 中将值设置为 2005。您可能根据 2008 年的数据库生成了数据库。进行此更改后,EF 将停止使用 2008 语法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)