关于Linq to SQL 的“异常详细信息: System.InvalidCastException: 指定的转换无效。”

开发环境:VS2010,SQL Server2005,Windows7,使用LINQ to SQL作为ORM

运行环境:Windows2003(IIS6),.NET 3.5 SP1,SQL Server2000

症状:开发环境下一切正常,在运行环境中出现如下错误:

 

ExpandedBlockStart.gif代码
指定的转换无效。 
说明: 执行当前 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的环境中已经解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

由百度 “PHP薪资” 引发的思考

昨天晚上睡觉的时候百度了一下 “PHP薪资”,看到了各种各样的答案,从百度知道到知乎,再到各个论坛……答案也是从 2k-16k 不等(不过说实话,2k是吓到我了),其中一些答案说到了在中国从事某一行业…

哈希存储 java_Java容器系列之HashMap的存储

Java容器系列之HashMap概要本文将结合Java源码总结HashMap的存储结构及其扩容策略,并根据这些特点给出使用HashMap的最佳实践。本文不再介绍HashMap的基本使用,有需要的请先学习下Java容器的基础知识。存储结构HashMap的核心问题是如何保证读写的速度&am…

你增长的年龄,是因为丢掉了快乐吗?

这是周末,想写一篇文章给自己的一个朋友,试看能否解开他不安的情绪。我朋友是我真的朋友几年前我还是很害羞的我,有一次开技术会上,他公开的介绍了我,我觉得是一种认可,当然,也不会有一个不喜欢…

redhat5中架设DHCP服务器与DHCP中继

作者:奇异果Wickey Email:hkb178149081163.com 实验平台:VMvare 系统:RedHat5 软件包:DHCP-3.0.5 模拟需求分析:(暂无) 拓扑图: 1. 配置DHCPServer IP与GW 2. 安装DHCP…

linux下安装jdk_mysql_tomcat_redis

目前搬我以前的笔记,每个人做笔记方式都不一样,看别人的风格,生成自己的风格1.linux安装软件和redis学习jdk --- java开发运行环境Tomcat - WEB程序的服务器Mysql -- 持久化存储数据Redis -- 数据库 ,和MySQL原理不同//linux通用软件安装流程:(jdk安装)…

MCU HardFault问题查找和破解方法

一、HardFault产生原因和常规分析方法二、HardFault解决方法分析三、HardFault回溯的原理四、操作分析流程:1. 心里明白徒手分析法2. CmBacktrace 天龙大法五、总结一、HardFault产生原因和常规分析方法在嵌入式开发中,偶尔会遇到Hard Fault死机的异常&…

centos8 apache php,centos6.8安装php7 for Apache2

1,php for nginx就不用说了,我们的博客里面应该有写。 2,直接源码安装,安装apache,安装php7,安装mysql。除了麻烦一点,应该没什么问题。 3,yum的方式安装了apache和mysql&#xff0c…

php 逗号 分割字符串

介绍两个函数给你 <?php //利用 explode 函数分割字符串到数组 $source "hello1,hello2,hello3,hello4,hello5";//按逗号分离字符串 $hello explode(,,$source); for($index0;$index<count($hello);$index){ echo $hello[$index];echo "</br>&qu…

ASP.NET Core的身份认证框架IdentityServer4--入门【转】

原文地址 Identity Server 4是IdentityServer的最新版本&#xff0c;它是流行的OpenID Connect和OAuth Framework for .NET&#xff0c;为ASP.NET Core和.NET Core进行了更新和重新设计。在本文中&#xff0c;我们将快速了解IdentityServer 4存在的原因&#xff0c;然后直接进入…

Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

栈是什么&#xff1f;栈有什么作用&#xff1f;首先&#xff0c;栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out)&#xff0c;数据只能在串列的一端 (称为&#xff1a;栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。根据栈…

php session警告屏蔽,PHP Session的一个警告

警告全文如下:PHP Warning: Unknown: Your script possibly relies on a session side-effectwhich existed until PHP 4.2.3. Please be advised that the session extension doesnot consider global variables as a source of data, unless register_globals is enabled.You…

flex item的width VS flex-basis

flexbox的子元素flex item的宽度&#xff0c;按照以下规则计算&#xff1a;content>width>flex-basis(limited by max/min-width)flex-basis的缺省值为auto&#xff1b;如果flex-basis的值为auto&#xff0c;那么flex item的宽度由width属性决定&#xff1b;如果没有设置…

内核抢占会让内核调度更好吗?

大家好&#xff0c;我是老吴的朋友&#xff0c;这篇文章转发自老吴的公众号。今天要分享的是抢占相关的基础知识。本文以内核抢占为引子&#xff0c;概述一下 Linux 抢占的图景。我尽量避开细节问题和源码分析。什么是内核抢占&#xff1f;别急&#xff0c;咱们慢慢来。先理解抢…

php 解压dat,电脑微信dat文件怎么打开

微信dat转码软件使用操作说明在线解码,各位同学下载软件后&#xff0c;如何操作?如何找到dat文件?如何使用?又有哪些注意事项呢?这里会为大家一一道来。问题1 &#xff1a;如果下载失败怎么办?请先检查网络&#xff0c;软件并没有放在我的网站上&#xff0c;而是放在大厂七…

优雅地用宏实现环形缓冲区

之前写的环行缓冲区文章柔性数组和环形队列之间的故事C语言&#xff0c;环形队列循环缓冲区是嵌入式软件工程师在日常开发过程中的关键组件。多年来&#xff0c;互联网上出现了许多不同的循环缓冲区实现和示例。我非常喜欢这个模块&#xff0c;可以GitHub上找到这个开源的 CBUF…

XP访问Linux共享错误提示

XP访问RHEL5共享错误提示 [rootlocalhost samba]# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 21 …

php结束,PHP

国际化 (i18n) 与本地化 (l10n)Disclaimer for newcomers: i18n and l10n are numeronyms, a kind of abbreviation where numbers are used to shortenwords - in our case, internationalization becomes i18n and localization, l10n.首先&#xff0c;我们需要为这两个相似的…

一个漂亮的电子钟,纪念我们逝去的青春(含软硬件资料)

来源&#xff1a;阿莫论坛&#xff0c;作者&#xff1a;humancn微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09;公众号不少粉丝&#xff0c;大一大二做的第一个项目&#xff0c;都是电子时钟吧&#xff0c;非常经典的STC89C52DS1302数码管组…

JZOJ 5776. 【NOIP2008模拟】小x游世界树

5776. 【NOIP2008模拟】小x游世界树 (File IO): input:yggdrasil.in output:yggdrasil.out Time Limits: 1500 ms Memory Limits: 262144 KB Detailed Limits Goto ProblemSetDescription 小x得到了一个(不可靠的)小道消息&#xff0c;传说中的神岛阿瓦隆在格陵兰海的某处,据…

SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?...

如果你的数据库中某一个表中的数据满足以下几个条件&#xff0c;那么你就要考虑创建分区表了。 1、数据库中某个表中的数据很多。很多是什么概念&#xff1f;一万条&#xff1f;两万条&#xff1f;还是十万条、一百万条&#xff1f;这个&#xff0c;我觉得是仁者见仁、智者见智…