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

时间:2009-10-04 16:22:44

标签: asp.net-mvc linq-to-sql exception

在我的开发机器上,一切正常,但是只要我将其发布到服务器上就可以了

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

发生在

db.SubmitChanges();

我已查看https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=351358,但仍然会导致错误

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

5 个答案:

答案 0 :(得分:2)

你没有说你要提交给数据库的是什么,所以我建议的任何事情都会被(受过教育的)猜测。但是,需要考虑的是检查机器与服务器的日期格式。 这可以是操作系统级别或数据库级别。

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

但是,正如您所说,这不是此特定问题,请查看开发环境与服务器之间的差异,以突出显示可能存在的问题区域。

要检查的不完整清单:

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

答案 1 :(得分:1)

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

似乎问题在于我的表具有Id作为Int和主键,并且GUID是作为字段定义为唯一的,并且Guid字段是另一个表的键并被用作外键。

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我在致电时遇到同样的异常:

DataContext.SubmitChanges();
在改变上下文中的对象之后

。并且它在开发机器和服务器中工作,我得到了相同的转换错误。

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

要修复,我删除了关联。

答案 4 :(得分:0)

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