2011-01-26 64 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坑洞跳跃。

相关问题