Asp.net mvc System.InvalidCastException:在LINQ to SQL中插入记录时,指定的强制转换无效

Asp.net mvc System.InvalidCastException:在LINQ to SQL中插入记录时,指定的强制转换无效,asp.net-mvc,linq-to-sql,exception,Asp.net Mvc,Linq To Sql,Exception,在我的开发机器上,一切正常,但是一旦我将它发布到服务器上,我就会得到它 System.InvalidCastException:指定的强制转换无效 这发生在 db.SubmitChanges(); 我已经退房了,但它仍然会给我带来错误 我还运行了Windows Update,服务器上的所有内容都是最新的您没有说明要提交到数据库的内容,因此我的任何建议都是(经过教育的)猜测。然而,我想到的是检查机器和服务器上的日期格式。这可能是在操作系统级别或数据库级别 如果您的机器是英国,服务器是美国,那么如

在我的开发机器上,一切正常,但是一旦我将它发布到服务器上,我就会得到它

System.InvalidCastException:指定的强制转换无效

这发生在

db.SubmitChanges();
我已经退房了,但它仍然会给我带来错误


我还运行了Windows Update,服务器上的所有内容都是最新的

您没有说明要提交到数据库的内容,因此我的任何建议都是(经过教育的)猜测。然而,我想到的是检查机器和服务器上的日期格式。这可能是在操作系统级别或数据库级别

如果您的机器是英国,服务器是美国,那么如果您有一个以英国格式表示日期的字符串(例如30/9/2009),它将失败,因为没有30个月

但是,正如您所说,这不是这个特定的问题,请查找您的开发环境和服务器之间的差异,以突出可能存在问题的领域

要检查的内容列表不完整:

  • 不同的操作系统。我假设您在XP/Vista上,服务器在Windows Server上。获取一台具有相同操作系统的机器并在那里进行调试。您的开发机器是32位的,服务器是64位的(反之亦然)
  • 不同版本的.NET运行时。确保服务器运行的版本与开发计算机相同
  • 其他库等。您的开发机器上是否安装了服务器上没有安装的东西

您是否更改了模型或数据库中任何列的数据类型?该异常通常是由于L2S模型中使用的数据类型与数据库中使用的数据类型不匹配而引发的


或者,您是否有任何varchar(1)或nvarchar(1)字段?如果是这样,L2S设计器将默认将这些映射到System.Char。这是一个不正确的映射,因为varchar(1)或nvarchar(1)可以包含空字符串,而System.Char只能包含一个字符,并且可能导致引发InvalidCastException(尽管这种不匹配通常发生在检索数据时,而不是提交数据时).

好的,我已经解决了这个问题

问题似乎在于,我的表的Id为Int,主键为,GUID为定义为唯一的字段,而GUID字段是另一个表的键,并用作外键

当我将Guid字段设置为表中的主键时,问题就消失了


我还没有创建一个测试项目来证明这一点,因为我们下周就要上线了,由于时间限制

我在调用时遇到了同样的异常:

DataContext.SubmitChanges();
在上下文中更改对象之后。在开发机器和服务器上都是一样的,我得到了同样的强制转换错误

我使用字符串属性作为键在两个表之间建立了关联


为了修复,我删除了关联。

我也有这个问题。我已更改为本地数据库,但忘了对生产数据库进行此更改。

您的开发SQL Server是否与生产SQL Server的版本相同(即2005版和2008版,等等)?表中没有日期字段。表中到处都是,不仅仅是一次提交,它无法插入的大多数表,唯一不太简单的tables@Coppermill-在这种情况下,查找环境之间的差异。好的,我已经执行了一些测试,两个环境都是32位的,我已经将所有开发文件复制到服务器,并将连接字符串指向服务器和服务器上运行的.Net 3.5 sp1服务器数据库发展。所有参考文件都保存在bin目录中,与我从Dev-box连接到livesqldb的开发盒上的文件相同,可以正常工作。我有点不知所措,不知下一步该怎么办我在两周前就让这个应用程序顺利运行了,而且我所做的更改并不重要,也没有添加任何新内容。这就是为什么我如此困惑的原因。@Coppermill-对不起,我现在想不出其他任何东西了。数据库是一样的,SQL 2008Ok。这个问题容易重现吗?如果是这样,请编写一个代码段,在服务器上复制它。然后在提交更改之前更新该代码段以执行GetChangeSet。序列化更改集并检查数据,以查看是否有“有趣”的事情发生。另外,如果您可以在问题中包含用于创建一个受影响表的SQL-DDL以及来自[dbmlfile].designer.cs的同一表的DBML和/或类定义,那么这可能会对正在发生的事情有所帮助。。。