ASP.NET MVC 3プロジェクトには次のモデルがあります。
_public class Task
{
public int Id { get; set; }
public DateTime CreatedOn { get; set; }
public TaskStatus Status { get; set; }
}
public class TaskStatus
{
public int Id { get; set; }
public string Description { get; set; }
}
_
参考のために、ここに私のDbContextクラスがあります:
_public class TaskManagerSets : DbContext
{
public DbSet<Task> TaskSet { get; set; }
public DbSet<TaskStatus> TaskStatusSet { get; set; }
}
_
そして、私はListアクションを持っていますTaskController:
_TaskManagerSets dbcontext = new TaskManagerSets();
public ActionResult List()
{
var tasks = from tsk in dbcontext.TaskSet.Include("TaskStatusSet")
select tsk;
return View(tasks.ToList());
}
_
最後に、タスクリストビューがあります。
_ @model IEnumerable<TaskManager.Models.Task>
<ul>
@foreach (var tsk in Model)
{
<li>@tsk.Id | @tsk.CreatedOn | @tsk.Status.Description</li>
}
</ul>
_
プロジェクトを実行すると、次のエラーが表示されます。
指定されたインクルードパスが無効です。 EntityType 'CodeFirstNamespace.Task'は、 'TaskStatus'という名前のナビゲーションプロパティを宣言しません。
問題は間違いなくInclude("TaskStatusSet")
にありますが、どうすれば修正できますか?
Task
クラスのナビゲーションプロパティ名はStatus
です。だから、あなたは使用する必要があります:
var tasks = from tsk in dbcontext.TaskSet.Include("Status")
select tsk;
ただし、DbContext
APIを使用しているので、Includeのタイプセーフオーバーロードを使用する方が適切です。
using System.Data.Entity;
// You must add a using statement for this namespace to have the following
// lambda version of Include available
//...
var tasks = from tsk in dbcontext.TaskSet.Include(t => t.Status)
select tsk;
Intellisenseとコンパイル時のチェックを取得します。これにより、誤った文字列の問題を回避できます。