gpt4 book ai didi

c# - 如何使用 Entity Framework 更新嵌套属性

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:37 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com