簡體   English   中英

如何使用實體框架更新嵌套屬性

[英]How do I update a nested property with Entity Framework

我有一個ToDo類,它具有Staff和Priority的屬性。 如果用戶更新了待辦事項,請更改TaskName並設置一個新的Priority,如何更新Priority屬性-

public class ToDo : BaseEntity
{
    public DateTime? DueDate { get; set; }
    public String Notes { get; set; }
    public virtual Priority Priority { get; set; }
    public virtual Staff Staff { get; set; }
    public String TaskName { get; set; }
}

在我的WinForms代碼中,我具有以下保存方法:

private void Save()    
{    
    var todo = new ToDo    
    {    
        ID = ToDoID,    
        Staff = ddlStaff.SelectedValue,    
        Priority = ddlPriority.SelectedValue,    
        TaskName = txtTaskName.Text.Trim(),
        Notes = txtNotes.Text.Trim(),
        DueDate = String.IsNullOrEmpty(txtDueDate.Text) ? DateTime.Now : DateTime.Parse(txtDueDate.Text.ToString())
};

 _todoController.SaveOrUpdate(todo);

}

用戶界面具有用於Staff和Priority的下拉列表/組合列表,但ddlPriority.SelectedValue不是Priority對象。 可以調用傳遞SelectedValue的數據庫來返回Priority對象,然后將其傳遞到ToDo對象,但這似乎很瘋狂,只是為了創建/維護ToDo項與其優先級之間的關系。

您也可以設置並獲取一個名為PriorityId的額外屬性。 由於它們是無狀態的,因此在Web應用程序中這是非常常見的情況。

編輯:您也可以這樣做:

var selectedStaff = new Staff();
selectedStaff.Id = 2;
context.Staff.Attach(selectedStaff); // The important part.

var todo = new ToDo    
{    
    ID = ToDoID,    
    Staff = selectedStaff,
    Priority = ddlPriority.SelectedValue,    
    TaskName = txtTaskName.Text.Trim(),
    Notes = txtNotes.Text.Trim(),
    ....
}

context.SaveChanges();

調用context.Staff.Attach(someStaffObject)基本上將staff對象添加到上下文中以允許對其進行引用。 您必須確保在調用Attach()之前設置了key屬性。

暫無
暫無

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

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