Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;指定的强制转换无效";将LINQ保存到SQL实体时出错_C#_Asp.net Mvc_Sql Server 2008_Linq To Sql - Fatal编程技术网

C# &引用;指定的强制转换无效";将LINQ保存到SQL实体时出错

C# &引用;指定的强制转换无效";将LINQ保存到SQL实体时出错,c#,asp.net-mvc,sql-server-2008,linq-to-sql,C#,Asp.net Mvc,Sql Server 2008,Linq To Sql,应用程序详细信息: C#,ASP.NET MVC,SQL Server 2008(相同版本和SP级别),Linq到SQL ORM 我正在尝试诊断收到的异常: “指定的强制转换无效。” 位于System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManager`2.TryCreateKeyFromValues(对象[]值,V&V) 在System.Data.Linq.IdentityManager.StandardIden

应用程序详细信息: C#,ASP.NET MVC,SQL Server 2008(相同版本和SP级别),Linq到SQL ORM

我正在尝试诊断收到的异常:

“指定的强制转换无效。” 位于System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManager`2.TryCreateKeyFromValues(对象[]值,V&V)
在System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(Object[]keyValues)
在System.Data.Linq.IdentityManager.StandardIdentityManager.Find(元类型,对象[]键值)
位于System.Data.Linq.CommonDataServices.GetCachedObject(元类型,对象[]keyValues)
位于System.Data.Linq.ChangeProcessor.GetOtherItem(元关联assoc,对象实例)
位于System.Data.Linq.ChangeProcessor.BuildEdgeMaps()
在System.Data.Linq.ChangeProcessor.SubmitChanges(冲突模式故障模式)
在System.Data.Linq.DataContext.SubmitChanges(冲突模式故障模式)
位于System.Data.Linq.DataContext.SubmitChanges()
在Repository.Save()中 等等

问题是,这只发生在我们的服务器上,而不是在我们的本地开发箱上。我追踪到了我们正在修改的一处房产:

event.SalesForceId = "701Q0000000AOTIIA4";
如果我把这句话注释掉,一切都很好

我试过:

1)为服务器上的所有代码打蜡并重新部署。同样的问题。
2)取下服务器数据库的副本并在本地进行尝试。工作正常。
3)尝试在同一个框上安装的其他IIS环境。同样的问题。
4)物理比较(使用AdeptSQL)本地和远程模式。没有区别。
5)验证两列(本地和远程)的数据类型是否相同。此外,此列是另一个表的FK。我验证了它们都是相同的数据类型,一直到排序规则

服务器是Windows server 2008,本地框是Windows 7 x64。两者都有所有重要的更新设置

我能想到的唯一一件事可能是,因为数据库和web服务器位于不同的框中,这可能是一个问题?否则,我完全被难倒了


有什么想法吗?

如果该键存在于定义的关系中,并且对象已经创建,则必须使用LINQ提供的关系路径(
obj.Foo=new Foo{…}
)。(即使对于新对象,我也会使用提供的关系)。如果不这样做的话——从经验上讲——将导致类似这样的“随机”错误

另一个可能导致该错误(或非常类似的错误)的问题是复合关系的反向关系列。然而,如果生成的代码是相同的,而DB是相同的(实际上,在两个帐户上),那么我怀疑第一个原因就是罪魁祸首


快乐的SQL到LINQ坑洞跳跃。

这是LINQ到SQL中一个众所周知的错误

这个问题有一个热修复程序


上次通话中的
V
类型是什么?使用调试器查看。这是应用了所有service Pack的.net 3.5,而不是4。此外,我无法使用调试器单步执行它,因为它位于服务器上。远程调试也不是一个选项。有趣的是,在那些情况下,我通常会使用“正常”的
NullReferenceException
。如果我们能找出它为什么不能转换(我想是转换到
string
),那会很有帮助。@leppie如果我能找到一本处理LINQ错误的“食谱”,我很乐意放弃我最喜欢的袜子:-/+1我也想要一只。通常,如果我可以连接到进程并使用调试器,那么找出内部发生的事情并不难(当然可以借助Reflector的一点帮助),然后追溯到问题(查看托管堆栈中的状态/局部变量)。对象还不存在。原始代码段中的“事件”是FK中引用的对象。因此,引用对象将稍后出现。而且,这只发生在特定的环境中,而不是在任何地方。这就是为什么它如此令人费解的原因。@leppie:没错。起初我假设db/dbml/generated.cs文件中存在某种类型不匹配。但一切都是一个字符串。我下载了963657并试图安装它,但它给了我以下错误:此软件更新解决的所有产品都没有安装在这台计算机上。单击“取消”退出安装程序。这是因为963657用于Framework3.5SP1,但我使用的是Framework3.5。