我的 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; }
}
然后我的 TaskController 中有一个 List 操作:
TaskManagerSets dbcontext = new TaskManagerSets();
public ActionResult List()
{
var tasks = from tsk in dbcontext.TaskSet.Include("TaskStatusSet")
select tsk;
return View(tasks.ToList());
}
我终于有了任务 ListView :
@model IEnumerable<TaskManager.Models.Task>
<ul>
@foreach (var tsk in Model)
{
<li>@tsk.Id | @tsk.CreatedOn | @tsk.Status.Description</li>
}
</ul>
当我执行我的项目时,出现以下错误:
A specified Include path is not valid. The EntityType 'CodeFirstNamespace.Task' does not declare a navigation property with the name '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 和编译时检查,这有助于避免像您一样出现错误字符串的问题。
关于c# - LINQ to Entities 查询中的 Include(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648154/