C# 无法使用实体框架更新子实体

C# 无法使用实体框架更新子实体,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,这些是我的模型课 public class Survey { [Key] public int SurveyID { get; set; } [Required] public string Title { get; set; } [DataType(DataType.Text)] [Required] public string Description { get; set; } public virtual Category C

这些是我的模型课

public class Survey
{
    [Key]
    public int SurveyID { get; set; }
    [Required]
    public string Title { get; set; }
    [DataType(DataType.Text)]
    [Required]
    public string Description { get; set; }
    public virtual Category Category { get; set; }
}

public class Category
{
    [Key]
    public int CategoryID { get; set; }
    public string CategoryText { get; set; }
}
SurveyController
的编辑操作中,测量特性正在更新,但类别没有更新

这是编辑操作代码

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Survey survey)
{
    db.Database.Log = s => Debug.WriteLine(s);

    if (ModelState.IsValid)
    {
        db.Entry(survey).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(survey);
}

默认情况下,实体框架不更新导航属性。EF只知道/跟踪您显式更新的属性中的更改。只有在使用相同上下文检索父对象时,EF才能保存子对象

作为解决方案,您需要显式迭代子属性,并将其状态设置为“修改”

示例代码 更新

var child = new ChildEntity() {Id = 1};
child.ParentEntityId = 1;  // Assigning FK
context.Childs.Attach(child);
context.Entry(child).State = EntityState.Modified;
context.SaveChanges();

默认情况下,实体框架不更新导航属性。EF只知道/跟踪您显式更新的属性中的更改。只有在使用相同上下文检索父对象时,EF才能保存子对象

作为解决方案,您需要显式迭代子属性,并将其状态设置为“修改”

示例代码 更新

var child = new ChildEntity() {Id = 1};
child.ParentEntityId = 1;  // Assigning FK
context.Childs.Attach(child);
context.Entry(child).State = EntityState.Modified;
context.SaveChanges();

尝试将子状态标记为已显式修改。已尝试。。不工作。请尝试将子状态显式标记为已修改。已尝试。。不工作我只想更新调查实体的外键我只想更新调查实体的外键