Ich habe die folgenden Modelle in meinem ASP.NET MVC 3-Projekt:
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; }
}
Als Referenz ist hier meine DbContext Klasse:
public class TaskManagerSets : DbContext
{
public DbSet<Task> TaskSet { get; set; }
public DbSet<TaskStatus> TaskStatusSet { get; set; }
}
Dann habe ich eine List Action in meinem TaskController:
TaskManagerSets dbcontext = new TaskManagerSets();
public ActionResult List()
{
var tasks = from tsk in dbcontext.TaskSet.Include("TaskStatusSet")
select tsk;
return View(tasks.ToList());
}
Endlich habe ich die Aufgabenlistenansicht:
@model IEnumerable<TaskManager.Models.Task>
<ul>
@foreach (var tsk in Model)
{
<li>@tsk.Id | @tsk.CreatedOn | @tsk.Status.Description</li>
}
</ul>
Wenn ich mein Projekt ausführe, erhalte ich die folgende Fehlermeldung:
Ein angegebener Include-Pfad ist ungültig. Der EntityType 'CodeFirstNamespace.Task' deklariert keine Navigationseigenschaft mit dem Namen 'TaskStatus'.
Das Problem liegt definitiv bei der Include("TaskStatusSet")
, aber wie soll ich das beheben?
Der Name der Navigationseigenschaft in Ihrer Klasse Task
lautet Status
. Also müssten Sie verwenden:
var tasks = from tsk in dbcontext.TaskSet.Include("Status")
select tsk;
Da Sie jedoch mit der DbContext
-API arbeiten, ist es besser, die typsichere Überladung von Include zu verwenden:
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;
Sie erhalten Intellisense- und Kompilierungszeitprüfungen, mit denen Sie Probleme mit falschen Zeichenfolgen vermeiden können.