关于Linq to SQL 的“异常详细信息: System.InvalidCastException: 指定的转换无效。”
開發環境:VS2010,SQL Server2005,Windows7,使用LINQ to SQL作為ORM
運行環境:Windows2003(IIS6),.NET 3.5 SP1,SQL Server2000
癥狀:開發環境下一切正常,在運行環境中出現如下錯誤:
?
代碼 指定的轉換無效。?說明:?執行當前?Web?請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。?
異常詳細信息:?System.InvalidCastException:?指定的轉換無效。
源錯誤:?
執行當前?Web?請求期間生成了未處理的異常。可以使用下面的異常堆棧跟蹤信息確定有關異常原因和發生位置的信息。??
堆棧跟蹤:?
[InvalidCastException:?指定的轉換無效。]
???System.Data.Linq.SingleKeyManager`2.TryCreateKeyFromValues(Object[]?values,?V&?v)?+59
???System.Data.Linq.IdentityCache`2.Find(Object[]?keyValues)?+28
???System.Data.Linq.StandardIdentityManager.Find(MetaType?type,?Object[]?keyValues)?+23
???System.Data.Linq.CommonDataServices.GetCachedObject(MetaType?type,?Object[]?keyValues)?+48
???System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation?assoc,?Object?instance)?+142
???System.Data.Linq.ChangeProcessor.BuildEdgeMaps()?+254
???System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode?failureMode)?+59
???System.Data.Linq.DataContext.SubmitChanges(ConflictMode?failureMode)?+331
???System.Data.Linq.DataContext.SubmitChanges()?+19
???Senparc.Web.Admin.ProductEdit.btnSubmit_Click(Object?sender,?EventArgs?e)?+847
???System.Web.UI.WebControls.Button.OnClick(EventArgs?e)?+111
???System.Web.UI.WebControls.Button.RaisePostBackEvent(String?eventArgument)?+110
???System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String?eventArgument)?+10
???System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler?sourceControl,?String?eventArgument)?+13
???System.Web.UI.Page.RaisePostBackEvent(NameValueCollection?postData)?+36
???System.Web.UI.Page.ProcessRequestMain(Boolean?includeStagesBeforeAsyncPoint,?Boolean?includeStagesAfterAsyncPoint)?+1565
?
?
?分析原因:
注意到“System.Data.Linq.IdentityCache`2.Find(Object[]?keyValues)?+28”這一句,說明和數據庫的主鍵很可能有關,于是排查有關主鍵的所有操作。最后發現,在SQL數據庫中,有兩個表的主鍵為ID(int類型),并且沒有關聯;而在LINQ to SQL中,這兩個表進行了關聯,并且關聯的字段都為非主鍵的Guid類型。于是猜測可能是LINQ to SQL對主鍵的映射出現了問題。
?
解決方法1:在LINQ to SQL的.dbml文件中(也可以可視化操作其屬性),將這兩個表的主鍵變為Guid外連字段。問題解決。
解決方法2:使數據庫和LINQ to SQL同步,修改數據庫中的主鍵,并使用LINQ to SQL重新自動生成映射。
?
結論:網上搜了一下,似乎沒有提到這種處理方法,反而提到了和Guid相關的很多信息,可以比較肯定的是:這是一個.NET3.5中的bug,在4.0的環境中已經解決。
總結
以上是生活随笔為你收集整理的关于Linq to SQL 的“异常详细信息: System.InvalidCastException: 指定的转换无效。”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC应用程序实例
- 下一篇: HTTP_POST———使用mysql_