我有一个 ToDo 类,它具有 Staff 和 Priority 的属性。如果用户更新 ToDo 项,更改 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);
用户界面有员工和优先级的下拉/组合列表,但 ddlPriority.SelectedValue 不是优先级对象。我可以调用传递 SelectedValue 的数据库以返回 Priority 对象,然后将其传递给 ToDo 对象,但这似乎很疯狂,只是为了创建/维护 ToDo 项目与其优先级之间的关系。
最佳答案
您也可以设置和获取名为 PriorityId
的额外属性。这是网络应用程序中非常常见的场景,因为它们是无状态的。
编辑:您也可以这样做:
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)
主要是将人员对象添加到上下文中以允许引用它。您必须确保在调用 Attach()
之前设置了 key 属性。
关于c# - 如何使用 Entity Framework 更新嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3418543/