操作可能会破坏运行时的稳定性:LinqToSQL

时间:2009-01-27 00:03:19

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

尽管这是我见过的最好的错误信息之一(仅次于“此操作可能会破坏时空连续体中的租金”),但它也是最令人沮丧的事情之一。

我开发了一个ASP.NET MVC站点,它可以通过VS2008完美运行。它完美地托管在本地IIS7服务器(Win2008Server和Win7beta)上,以及另一台Win2008Server主机上。几天前,我将网站上传到新主机(Win2008Server),并且只要评估了我的LinqToSQL语句中的一个(并且只有一个),就会遇到“操作可能会破坏运行时”的错误。

有问题的Linq语句已被简化为默默无闻,并且每当我评估结果时,错误都会发生:

var result = from e in db.calendarEvents select e;
foreach (var event in result)  // error occurs on this line
{
    ...
}

有问题的远程主机完全信任,并且看不到切换语句(这两个问题在Google上出现与错误相关)。

Operation could destabilize the runtime?报告了类似的问题,但没有使用任何接口(我知道)。

有什么想法吗?

---暂停:有问题的表使用TIME数据类型,并映射到TimeSpan属性。显然,这仅适用于.NET 3.5 SP1。我等着找出我的新主机是否安装了SP1 ...

5 个答案:

答案 0 :(得分:3)

好的,最终结果是我的主机在安装了.NET 3.5的服务器上运行我的站点(而不是SP1),并且使用TIME SQL数据类型的一个表打破了上述错误。 http://msdn.microsoft.com/en-us/library/bb386947.aspx指出LINQ to SQL支持从.NET 3.5 SP1开始映射这些新类型。

我的主机将我的网站迁移到.NET 3.5 SP1服务器,一切都很好。

答案 1 :(得分:1)

event是一个关键字。改为使用@event作为变量名。

答案 2 :(得分:0)

如果你这样做会发生什么

var result = (from e in db.calendarEvents select e).ToList();
foreach (var event in result)  // error occurs on this line
{
    ...
}

以便在进入循环之前评估SQL?

答案 3 :(得分:0)

可能值得更改此代码以获取数据,然后检查确保数组具有值。

dim result = (from e in db.calendarEvents).toArray
If not results is nothing andalso results.length > 0 then
   'Do Loop
End If

如果linq查询没有返回任何内容,则可以避免尝试完成for循环的错误

答案 4 :(得分:0)

在我看到发生此错误的过去实例中,这是由于反射尝试设置只读属性或字段。由于Linq2Sql使用反射,我的猜测是这就是问题所在。您应该调查“e”是实例的类的类型定义。

确保属性在正确的成员上。并注意Linq2SQL类中的readonly。