我使用代码优先方法在ASP.NET MVC 3中使用复合主键进行自引用模型:
public class Area
{
[Key, Column(Order=0)]
public int Id1 { get; set; }
[Key, Column(Order=1)]
public int Id2 { get; set; }
public string Name { get; set; }
public virtual Area Parent { get; set; }
}
我希望控制器具有可以处理所有属性的创建和编辑操作,包括复合Parent
(必须先添加到数据库中)。
我设法让create方法运行,但是编辑复杂字段不想更新。以下方法的输入数据成功解析为同时设置了area
和area.Parent.Id1
的对象area.Parent.Id2
。
当前代码未保存对Parent
的修改的更改:
[HttpPost]
public ActionResult Edit(Area area)
{
try
{
if (ModelState.IsValid)
{
if (area.Parent != null)
{
area.Parent = db.Areas.Find(area.Parent.Id1, area.Parent.Id2);
if (area.Parent == null)
throw new NotFoundException();
// need to mark it as modified...
}
db.Entry(area).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (NotFoundException)
{
//...
}
return View(area);
}
答案 0 :(得分:0)
如果有人需要,我找到了一种解决方法。将其添加到模型中:
[ForeignKey("Parent"), Column(Order = 0)]
public int Parent_Id1 { get; set; }
[ForeignKey("Parent"), Column(Order = 1)]
public int Parent_Id2 { get; set; }
并将其添加到“需要将其标记为已修改”的位置:
area.Parent_Id1 = area.Parent.Id1;
area.Parent_Id2 = area.Parent.Id2;