我有一个ToDo类,它具有Staff和Priority属性。如果用户更新ToDo项,则更改TaskName并设置新的优先级如何更新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);
}
UI具有Staff和Priority的下拉/组合列表,但ddlPriority.SelectedValue不是Priority对象。我可以调用数据库传递SelectedValue以返回Priority对象,然后将其传递给ToDo对象,但这似乎很疯狂,只是创建/维护ToDo项目与其优先级之间的关系。
答案 0 :(得分:0)
您也可以使用您设置和获取的名为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()
之前,您必须确保设置密钥属性。