【问题标题】:LINQ2SQL InvalidCastExceptionLINQ2SQL InvalidCastException
【发布时间】:2013-03-06 19:26:52
【问题描述】:

我有一个网站时常无法访问数据库。该网站仍然在 IIS 上运行,我可以毫无问题地访问首页。

我在开发或测试中没有遇到过这个错误,只有在现场。

我第一个记录的异常似乎总是一个 InvalidCastException,带有以下堆栈跟踪。

06-03-2013 09:06:26 
The exception was: Specified cast is not valid.
at System.Data.SqlClient.SqlBuffer.get_Int32()
at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)
at Read_Question(ObjectMaterializer`1 )
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
at System.Data.Linq.EntityRef`1.get_Entity()
at DB.TempQuestion.get_Question() in xxxx\DBLinq.designer.cs:line 9808
at xxxx.TestController.BuildBarHelperForPersonAssignment(PersonAssignment pa) in xxxx\TestController.cs:line 751
at xxxx.TestController.BuildMovieModel(TempMovie tm, PersonAssignment pa) in xxxx\TestController.cs:line 792
at xxxx.TestController.ShowMovie(TempMovie tm, PersonAssignment pa) in xxxxx\TestController.cs:line 636
at xxxx.TestController.Index(String id, FormCollection form, Nullable`1 currentid, String type, Int32[] selectedTest) in xxxx\TestController.cs:line 313

在此之后,我收到各种 InvalidCastExceptions 和“服务器无法恢复事务”错误。

很清楚错误发生在哪里。我的问题是为什么会发生这种情况以及为什么会导致应用程序无法访问数据库?

我认为错误出现在所有这些之前。

我的应用设置:

ASP.NET MVC2、LINQ2SQL、MsSQL Server 2008 R2、IIS 7.5 (ASP 2.0)

我的控制器设置:

我担心我需要重新设计我的控制器,它们几乎都是这样的。

[Authorize(Roles = "xxxxx")]
Public class ABController : Controller
{
    private readonly DBLinqDataContext _db = new DBLinqDataContext();

    public ActionResult Index()
    {
        ...
    }
}

会不会因为 DBLinqDataContext 的未关闭而发生此错误?

添加以下覆盖的方法可能有帮助吗?

    protected override void Dispose(bool disposing)
    {
        _db.Dispose();
        base.Dispose(disposing);
    }

如果您需要更多信息,请告诉我!

【问题讨论】:

  • 能否在您的索引操作中显示代码并标记引发异常的行?
  • 我正在通过 EntitySet

标签: linq-to-sql asp.net-mvc-2 sql-server-2008-r2 iis-7.5 .net


【解决方案1】:

看起来您已将 TempQuestion 的属性类型之一从 int 更改为某项,但忘记更改相应表列的类型。

【讨论】:

  • 是的,这就是它的样子——但事实并非如此。我已经验证了我的 LINQ 生成的东西,在上一个版本中没有任何变化。 “似乎元数据在内存中不再正确表示,因为我之后看到了许多 InvalidCastExceptions。我猜这是由于系统试图将字符串反序列化为 int 字段,因为元数据偏移不正确。”我想我的问题有点类似于stackoverflow.com/questions/1388599/…
【解决方案2】:

解决了...

这是由于多个未处理的dataContext

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多