我有一个模型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
而不是其他方式 - 不是)?
P.S。使用最新的MVC和EF。
答案 0 :(得分:0)
显然必须(?)(至少我找不到更好的东西)添加与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);
移除。