MVC3-ObjectContext实例发布,不能再用于需要连接共享的操作我是对C#和MVC非常陌生,我一直在创建自己的小博客网站作为测试项目。虽然大多数事情都在工作,但我无法从LINQ查询中选择多个列。只有在SO上偶然发现这个问题后,我才意识到我可以使用生成的实体类作为强类型模型来处理这个问题。我需要这个,因为我一直在创建一个数据库层(这也是我以前没有使用过的东西)并且试图通过该层传递匿名类型是行不通的。我明白为什么会这样,所以我很满意我正朝着正确的方向前进。但是,这种方法似乎给我带来了另一个问题。我尝试了一个简单的测试来从我的Categories表中检索2列:CategoryID和Name。我最初尝试了以下方法:返回视图(模型);当我尝试遍历视图中的模型时,这给了我ObjectContextisdisposed错误。读完这个问题后,我尝试将return语句移到using块之外,并像这样在模型上调用AsEnumerable():IEnumerablemodel;使用(MyEntitiesdb=newMyEntities()){model=fromcindb.CategoriesselectnewCategory{CategoryID=c.CategoryID,Name=c.Name};}返回视图(model.AsEnumerable());但是,这仍然给我相同的ObjectContext配置错误。所以现在我不明白为什么会出现错误。我什至尝试完全删除using指令,但这给了我一个不同的错误:“无法在LINQtoEntities查询中构造实体或复杂类型‘MyProjectModel.Category’。”如果有帮助,这里是我的观点的相关代码:@modelIEnumerable@foreach(varcategoryinModel){@category.Name}有人会好心告诉我我错过了什么吗?谢谢。在控制器中渴望并在处理之前调用.ToList()以在离开using块之前立即执行查询(在为时已晚并且上下文消失之后):using(MyEntitiesdb=newMyEntities()){varmodel=fromc在db.Categories中选择新类别{CategoryID=c.CategoryID,Name=c.Name};返回视图(模型。ToList());//现在,虽然这将解决您的特定问题,但开发人员或依赖项注入框架通常做的是在BeginRequest事件中实例化DbContext,将其存储在HttpContext.Items中,以便在整个请求执行过程中和在EndRequest中都可用方法,从HttpContext中检索它并处理它。更新:此外,最好使用仅包含您要在此特定视图中使用的属性的视图模型:publicclassCategoryViewModel{publicintId{get;放;}公共字符串名称{得到;放;}}然后在你的行动中:publicActionResultIndex(){using(MyEntitiesdb=newMyEntities()){varmodel=fromcindb.CategoriesselectnewCategoryViewModel{Id=c.CategoryID,Name=c.Name};返回视图(模型.ToList());}}并且在视图中:以上是C#学习教程:MVC3-ObjectContext实例已经被释放,不能再用于需要连接的操作。更多C#学习教程,希望大家多多关注---@modelIEnumerable@foreach(varcategoryinModel){id:@category.IdName:@category.Name}本文收集自网络,确实不代表立场。侵权请点击右侧联系管理员删除。如需转载请注明出处:
