簡體   English   中英

在LINQ to Entities查詢中包含()

[英]Include() in LINQ to Entities query

我的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 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<TaskManager.Models.Task>

 <ul>
 @foreach (var tsk in Model) 
 { 
    <li>@tsk.Id | @tsk.CreatedOn | @tsk.Status.Description</li> 
 } 
 </ul>

當我執行我的項目時,我收到以下錯誤:

指定的包含路徑無效。 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和編譯時檢查,這有助於避免出現像您一樣的錯誤字符串問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM