Include() dans la requête LINQ to entities
J'ai les modèles suivants dans mon ASP.NET MVC 3 projet:
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; }
}
Pour référence, voici mon DbContext classe:
public class TaskManagerSets : DbContext
{
public DbSet<Task> TaskSet { get; set; }
public DbSet<TaskStatus> TaskStatusSet { get; set; }
}
Puis j'ai une Liste dans mes TaskController:
TaskManagerSets dbcontext = new TaskManagerSets();
public ActionResult List()
{
var tasks = from tsk in dbcontext.TaskSet.Include("TaskStatusSet")
select tsk;
return View(tasks.ToList());
}
Enfin, j'ai la Liste des Tâches de la Vue:
@model IEnumerable<TaskManager.Models.Task>
<ul>
@foreach (var tsk in Model)
{
<li>@tsk.Id | @tsk.CreatedOn | @tsk.Status.Description</li>
}
</ul>
Quand j'execute mon projet, j'obtiens l'erreur suivante:
Un certain chemin n'est pas valide. Le EntityType 'CodeFirstNamespace.Tâche de ne pas déclarer une propriété de navigation avec le nom "TaskStatus'.
Le problème est certainement sur le Include("TaskStatusSet")
mais comment dois-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
La navigation nom de la propriété dans votre
Task
classe estStatus
. Donc, vous auriez à utiliser:Mais puisque vous travaillez avec le
DbContext
API, une meilleure option est d'utiliser le type-safe surcharge de Comprendre:Vous obtiendrez Intellisense et des contrôles de compilation qui permet d'éviter les problèmes avec un mal de chaînes comme vous l'avez fait.
Expression<Func<T, TProperty>> path
.CTP4
dans vos tags. Êtes-vous toujours à l'aide de CTP4 version? Peut-être cette surcharge n'existait pas dans cette ancienne version. La version actuelle est ici: blogs.msdn.com/b/adonet/archive/2011/04/11/ef-4-1-released.aspxSystem.Data.Entity
pour obtenir la version dactylographiée de la compilation.