我是一名有帮助的助手,以下是针对您提供的翻译:
在控制器开始时:
在结尾处(并将“Using”去掉)
虽然这个方法可行,但我很好奇为什么“Using”不起作用,并且我不喜欢在整个控制器中保持连接,最后还要手动处理它。
我正在创建一个由主题组成的论坛,这些主题由消息组成。
当我尝试在控制器中实现主题视图时:
public ActionResult Topic(int id) //Topic Id
{
using (var db = new DataContext())
{
var topic = db.Topics.Include("Messages").Include("Messages.CreatedBy").Include("CreatedBy").FirstOrDefault(x => x.Id == id);
//include the messages for each topic, and when they were created so that the last message can be displayed on the topic page
return topic != null ? View(topic) : View();
}
}
当我尝试查看话题页面时,出现了以下错误:
用户代码未处理 ObjectDisposedException
ObjectContext 实例已被释放,不能再用于需要连接的操作。
该错误似乎与特定行无关,因为当我删除有问题的行时,同样的错误会更早地出现。
我已通过使用以下内容解决了此问题:
DataContext db = new DataContext();
在控制器开始时:
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
在结尾处(并将“Using”去掉)
虽然这个方法可行,但我很好奇为什么“Using”不起作用,并且我不喜欢在整个控制器中保持连接,最后还要手动处理它。
View(topic)
。看起来这个对象试图在上述方法返回后的某个时候使用DataContext
。但是此时DataContext
对象已被处理并且无法使用。这就是Dismissile在他的答案中所描述的。 - Jeppe Stig Nielsen