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

标签 c# entity-framework-4

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

相关文章:

c# - 如何使用 Graphics.DrawString 绘制完全单色文本?

asp.net - 在 Entity Framework 中删除对象时的并发性

C# 将 GMT 日期字符串解析为 DateTime

c# - using() { } block 中的 yield return 语句 在执行之前处理

c# - 关闭时,任务栏占用的空间被阻塞,不释放

sql - 如何在 C# 中的 codefirst 技术中使用带有 EF 的 Linq 避免 SQL 注入(inject)

mysql - Linq 返回外键引用的数据

c# - EF Core 3.0 替换 IMutableIndex.Npgsql() 方法

c# - 如何将 ef4 上下文或至少某些实体还原为其原始值?

entity-framework - LINQPad 查询错误