EF编辑时不保存虚拟属性

本文关键字:虚拟 属性 保存 编辑 EF | 更新日期: 2023-09-27 18:04:48

我有一个模型Team,看起来像这样:

public class Team
{
    [Key]
    public int TeamId { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
    public virtual Group Group { get; set; }
}

我有一个方法来Edit它:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Team team)
{
    using (var db = new DbConnection())
    {
        if (ModelState.IsValid)
        {
            db.Entry(team).State = EntityState.Modified;
            db.Groups.Attach(team.Group);
            db.SaveChanges();
        }
        return PartialView(team);
    }
}

然而,它没有保存更改到Group列。同时,Create方法确实有效,尽管我认为它们之间没有区别:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Team team)
{
    using (var db = new DbConnection())
    {                
        if (ModelState.IsValid)
        {
            db.Groups.Attach(team.Group);
            db.Teams.Add(team);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return PartialView(team);
    }
}

Group的值在两种方法中是相同的。我像这样把值输入到表单中(同样,两者都是一样的):

ViewBag.Groups = db.Groups.ToList().Select(g => new SelectListItem()
{
    Text = g.Code,
    Value = g.GroupId.ToString(),
    Selected = false
}).ToList(); 

并像这样使用它们:

@Html.DropDownListFor(model => model.Group.GroupId, (List<SelectListItem>)ViewBag.Groups)

有人能解释一下两种方法之间的区别是什么(就一个保存Group和其他-不是而言)?

注:使用最新的MVC和EF.

EF编辑时不保存虚拟属性

显然这是必须的(?)(至少我找不到更好的)添加一个匹配Group类型的字段,以便能够轻松保存。不需要这样附加任何东西。现在我的模型看起来像:

public class Team
{
    [Key]
    public int TeamId { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
    public int? GroupId { get; set; }
    public virtual Group Group { get; set; }
}

和我的SaveCreate方法得到了这一行:

db.Groups.Attach(team.Group);