在LINQ to Entities查询中包含()

我的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 TaskSet { get; set; } public DbSet TaskStatusSet { get; set; } } 

然后我在TaskController中有一个List Action:

 TaskManagerSets dbcontext = new TaskManagerSets(); public ActionResult List() { var tasks = from tsk in dbcontext.TaskSet.Include("TaskStatusSet") select tsk; return View(tasks.ToList()); } 

最后我有任务列表视图:

  @model IEnumerable 
    @foreach (var tsk in Model) {
  • @tsk.Id | @tsk.CreatedOn | @tsk.Status.Description
  • }

当我执行我的项目时,我收到以下错误:

指定的包含路径无效。 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和编译时检查,这有助于避免出现像您一样的错误字符串问题。