私は一般的に C# と MVC に非常に慣れておらず、テスト プロジェクトとして自分の小さなブログ サイトを作成しています。ここまではほとんど問題なく動作していますが、LINQ クエリから複数の列を選択する際に問題が発生しました。これを処理するために、生成されたエンティティ クラスを厳密に型指定されたモデルとして使用できることに気付いたのは、SO に関する質問に出くわした後でした。データベース層を作成しており(これも以前に使用したことがないものです)、その層を介して匿名型を渡そうとしても機能しなかったため、これが必要でした。なぜそうなったのかは理解できたので、正しい方向に向かっていることに満足しています。
しかし、このアプローチは私に別の問題を与えたようです。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 が破棄されたというエラーが発生しました。この質問を読んだ後、return ステートメントを using ブロックの外に移動し、次のようにモデルで 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 が破棄されたというエラーが引き続き表示されます。だから今、私はなぜエラーが発生しているのか理解できません。using ディレクティブを完全に削除しようとしましたが、別のエラーが発生します。
「エンティティまたは複合型 'MyProjectModel.Category' は、LINQ to Entities クエリで構築できません。」
それが役立つ場合は、私のビューに関連するコードを次に示します。
@model IEnumerable<MyProject.Models.Category>
@foreach (var category in Model)
{
<p>@category.Name</p>
}
誰かが私に足りないものを教えてくれますか?
ありがとう。