2011-10-04 52 views
1

兩個問題,其次是詳細信息:EF:更改ProviderManifestToken或更改數據類型?

  1. 當我改變我的ProviderManifestToken爲「2005」還有什麼其他的副作用發生的呢?
  2. 將數據庫中的模式更改從datetime更改爲datetime2是不明智的嗎?例如,如果我將ProviderManifestToken保留爲「2008」,稍後有人試圖從EDMX模型生成數據庫模式,那麼在創建這些列時它會使用datetime2數據類型嗎?

詳情:

VS2010 SP1
.NET 4
EF 4
SQL Server 2008中

我沒有動手實體框架的經驗,我突然維護一個使用它的代碼庫。代碼庫非常脆弱,時間緊,還沒有被那些人理解。

解決方案資源管理器顯示一個EDMX文件,該文件映射到我們DEV數據庫中的現有模式。我不知道哪個(模型或數據庫)首先出現。

提交操作時得到這個錯誤:

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

當我看着我的日期/時間列的數據類型在我的SQL Server 2008實例,他們都datetime,不datetime2

當我看EDMX文件的XML,我看到這個架構元素屬性:

ProviderManifestToken="2008"

我猜,什麼地方,有一個在我的.NET代碼具有值的日期時間值超出SQL Server 2008的datetime數據類型的範圍。我從閱讀中瞭解到,將EDMX的ProviderManifestToken更改爲「2005」會阻止EF在這些提交期間嘗試使用datetime2類型。

這裏是我的問題:我不知道這個代碼庫還有什麼,或者EF的位置,如果我從2008年到2005年改變這個,它會發生變化,而且當我不是絕對的需要。

回答

1

通過將ProviderManifestToken更改爲2005,確實會失去某些功能。特別是,使用與SQL 2008時間類型相關的函數的LINQ查詢。我個人並沒有通過將令牌更改爲2005年(甚至是在多個環境中的每個環境基礎上)來解決問題......但這不是一件容易被忽略的問題。您需要徹底測試應用程序中的所有查詢。

至於由edmx生成的模式反向 - 這是由與您的edmx關聯的SQL生成模板確定的,而不是ProviderManifestToken本身。