webentwicklung-frage-antwort-db.com.de

Schließen Sie () in die LINQ to Entities-Abfrage ein

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?

25
nunaxe

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.

53
Slauma