Обновить составной внешний ключ - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть самоссылающаяся модель с составным первичным ключом в 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);
    }

1 Ответ

0 голосов
/ 15 сентября 2011

Я нашел обходной путь, если кому-то это нужно.Добавьте это к модели:

    [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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...