2010-07-28 52 views
5

我有一個LINQ to Entities應用程序和一個數據庫項目來管理VS 2010解決方案中針對.NET 4.0的模式。實體模型目前是從數據庫中反向設計的。其中一個表是用類型爲datetime的列定義的。數據庫項目配置爲使用SQL Server 2005兼容性模式,因此它都部署OK。LINQ to Entities在SQL 2005 Express上生成包含datetime2的查詢

我剛碰到其中通過實體框架的更新語句似乎使用DATETIME2而不是日期時間的問題,這會導致一個例外,因爲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的機器上創建了這個項目,但是我定期切換到另一臺沒有(並且不能升級)的機器。

+2

對於任何有LINQ to SQL的問題的人,可以在SQL Server中將表格字段的數據類型更改爲「smalldatetime」。然後將您的表重新拖到您的DBML,重新編譯,重新部署,您應該設置。我找不到相當於LINQ to SQL的ProvidermanifestToken – 2011-12-27 20:14:46

回答

13

您需要將EDMX中的ProviderManifestToken更改爲值2005.您可能已針對2008 DB創建了您的數據庫。進行此更改,EF將停止使用2008語法。

+0

完美!謝謝! – 2010-07-28 23:15:48

+0

非常有用,非常感謝。 – Fanda 2013-05-06 12:17:56