Сохранение изменений в EF - PullRequest
1 голос
/ 19 мая 2011

У меня есть Quiz.Component.Product.Type и представление, которое предоставляет компонент.когда вызывается Create postback, поскольку представление содержит поле Component_Id, связыватель модели создает для меня Quiz.Component и устанавливает .Id в правильное значение;все остальные поля остаются пустыми и, следовательно, так же и Продукт, что означает, что, когда я .Add() и пытаюсь .SaveChanges(), он жалуется, что компоненты участвуют в отношениях (с продуктами) и что ожидается продукт.

это означает, что я должен сделать:

[HttpPost] ActionResult Create(Quiz q)
{
    q.Product = db.Components.Where(x => x.Id == q.Component.Id).Product;
    ...
}

это может требовать слишком много, но есть ли способ, которым EF может выполнить эти поиски для меня?

1 Ответ

2 голосов
/ 19 мая 2011

Это слишком много. Это одна стратегия, которую можно использовать. В действии POST извлеките соответствующую модель, используя идентификатор, а затем TryUpdateModel, чтобы обновить свойства и, наконец, вызвать SaveChanges.

Это часто используемая парадигма:

[HttpPost]
public ActionResult Edit(int id)
{
    var model = db.SomeModel.Single(x => x.ID == id);
    if (TryUpdateModel(model))
    {
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(model);
}
...