我對C#和MVC一般都很陌生,我一直在創建自己的小博客網站作爲測試項目。雖然大多數事情都在努力達到這一點,但我在從LINQ查詢中選擇多個列時遇到了問題。只是在關於這個問題的絆腳石之後,我意識到我可以使用生成的實體類作爲強類型模型來處理這個問題。我需要這個,因爲我一直在創建一個數據庫層(這也是我以前沒有用過的),並試圖通過該層傳遞匿名類型不起作用。我明白爲什麼會這樣,所以我很滿意我正朝着正確的方向前進。MVC 3 - ObjectContext實例已被處置,不能再用於需要連接的操作
但是,這種方法似乎給了我另一個問題。我試過一個簡單的測試,從我的Categories表中檢索2列:CategoryID和Name。我最初嘗試以下內容:
using (MyEntities db = new MyEntities())
{
var model = from c in db.Categories
select new Category { CategoryID = c.CategoryID, Name = c.Name };
return View(model);
}
這給了我ObjectContext處理錯誤,當試圖遍歷視圖中的模型。閱讀this question後,我試圖在模型上移動的return語句,使用塊外,並呼籲AsEnumerable()像這樣:
IEnumerable<Category> model;
using (MyEntities db = new MyEntities())
{
model = from c in db.Categories
select new Category { CategoryID = c.CategoryID, Name = c.Name };
}
return View(model.AsEnumerable());
然而,這仍然給了我同樣的ObjectContext配置錯誤,當我嘗試遍歷視圖中的模型。所以現在我不明白爲什麼我得到錯誤。我甚至嘗試徹底刪除使用指令,但這給了我一個不同的錯誤:
「實體或複雜類型'MyProjectModel.Category'不能在LINQ to Entities查詢中構造。」
如果有幫助,下面是我的看法相關代碼:
@model IEnumerable<MyProject.Models.Category>
@foreach (var category in Model)
{
<p>@category.Name</p>
}
會有人好心地開導我,以我缺少什麼嗎?
謝謝。
'.ToList()'是(稍微)更快 – SLaks
嗨達林,謝謝你的迴應,但是這給了我複雜類型無法在LINQ to Entities查詢中構建的錯誤。我不知道它是否有所作爲,但是Category類是我自動生成的,作爲我的實體模型的一部分。 –
@johnh,我真的不熟悉LINQ to Entities,但是無論如何,直接在'using'塊內使用'return View(db.Categories.ToList());'來嘗試。 –