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

我在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; }
}
我希望有一个具有创建和编辑操作的控制器,可以处理所有属性,包括复合
父级
(必须事先添加到数据库中)

我设法让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;