尽管这是我见过的最好的错误信息之一(仅次于“此操作可能会破坏时空连续体中的租金”),但它也是最令人沮丧的事情之一。
我开发了一个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 ...
答案 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。