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.
显然这是必须的(?)(至少我找不到更好的)添加一个匹配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; }
}
和我的Save
和Create
方法得到了这一行:
db.Groups.Attach(team.Group);
。