2011-01-26 28 views
5

軟件詳情: C#,ASP.NET MVC,SQL Server 2008中(版本相同& SP級別),LINQ到SQL ORM「指定的轉換無效」 錯誤的過程中節省LINQ到SQL實體

我試圖診斷異常我收到:

"Specified cast is not valid." at System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManage`2.TryCreateKeyFromValues(Object[] values, V& v)
at System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(Object[] keyValues)
at System.Data.Linq.IdentityManager.StandardIdentityManager.Find(MetaType type, Object[] keyValues)
at System.Data.Linq.CommonDataServices.GetCachedObject(MetaType type, Object[] keyValues)
at System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc, Object instance)
at System.Data.Linq.ChangeProcessor.BuildEdgeMaps()
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
at Repository.Save() at etc....

的問題是,這是發生只在我們的服務器上,而不是在我們當地的發展框。我已將其追蹤到我們正在修改的單個媒體資源:

event.SalesForceId = "701Q0000000AOTIIA4"; 

如果我註釋掉該行,則一切正常。

我已經試過:

1)打蠟的所有代碼的服務器和重新部署上。同樣的問題。
2)拉下服務器數據庫的副本並在本地嘗試。工作正常。
3)嘗試另一個IIS環境,我們已經安裝在同一個盒子上。同樣的問題。
4)物理比較(使用AdeptSQL)本地和遠程模式。沒有區別。
5)驗證兩列(本地和遠程)的數據類型是相同的。此外,此列是另一個表的FK。我驗證了兩者都是相同的數據類型,直到整理。

服務器是Windows Server 2008,本地盒子是Windows 7 x64。兩者都有重要的更新設置。

我能想到的唯一可能是因爲數據庫和Web服務器在不同的盒子上可能是一個問題?否則,我完全被難住了。

任何想法?

+0

最後一次調用中`V`的類型是什麼?使用調試器來看看。 – leppie 2011-01-26 04:16:16

+1

另外,.NET 3.5或4.0? – leppie 2011-01-26 04:17:03

+0

這是.net 3.5,而不是4,應用了所有的服務包。另外,我不能使用調試器來逐步瀏覽它,因爲它在服務器上。遠程調試也不是一個選項。 – gcaprio 2011-01-26 17:00:13

回答

1

如果該鍵在限定的關係存在對象已經創建則LINQ提供的關係路徑(obj.Foo = new Foo { ... }必須使用。 (即使對於新對象,我也會使用提供的關係)。如果不這樣做,會導致 - 從經驗中講 - 在這樣的「隨機」錯誤中。

對於複合關係,可能導致(或非常類似的錯誤)的另一個問題是反向關係列。但是,如果生成的代碼是相同的,而數據庫是相同的(對於真實的帳戶),那麼我懷疑第一個原因是罪魁禍首。

快樂的SQL-to-LINQ坑洞跳躍。

相關問題