Asp.net mvc 3 更新复合外键
我在ASP.NET MVC 3中使用代码优先的方法有一个具有复合主键的自引用模型:Asp.net mvc 3 更新复合外键,asp.net-mvc-3,ef-code-first,Asp.net Mvc 3,Ef Code First,我在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 Pare
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; }
}
我希望有一个具有创建和编辑操作的控制器,可以处理所有属性,包括复合父级(必须事先添加到数据库中)
我设法让create方法运行,但编辑复杂字段时不想更新。以下方法的输入数据成功解析到对象区域
,该对象也具有区域.Parent.Id1
和区域.Parent.Id2
集
未保存更改以修改父级的当前代码:
[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);
}
如果有人需要,我找到了一种解决办法。将此添加到模型中:
[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;