Как вручную обновить модель в Entity Framework - PullRequest
0 голосов
/ 03 октября 2011

Я новичок в .NET MVC (обучение).У меня есть следующий метод в контроллере (это не чистый код, и я учусь)

        [HttpPost]
        public ActionResult Edit(ProductCategoryLocation viewModel)
        {
            if (ModelState.IsValid)
            {
                var product = viewModel.Product;
                product.Category = db.Categories
                    .Where(c => c.ID == viewModel.CategoryID).Single();                                 
                db.Entry(product).State = EntityState.Modified;               
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(viewModel);
        }

Модель представления имеет типы продукта, местоположения и категории, а также CategoryID и LocationID.В методе POST я получаю идентификатор категории из модели представления, обновите категорию продукта, а затем обновите модель до базы данных.Любые изменения в свойствах Продуктов сохраняются за исключением Категории, измененной вручную.

Есть ли ошибка / Я что-то упустил?Это правильный способ обновления с использованием View Model?

1 Ответ

0 голосов
/ 03 октября 2011

Вы можете напрямую назначить CategoryID модели вида на CategoryID продукта.Таким образом, вам не нужно извлекать категорию из базы данных.

    [HttpPost]
    public ActionResult Edit(ProductCategoryLocation viewModel)
    {
        if (ModelState.IsValid)
        {
            var product = viewModel.Product;
            product.CategoryID = viewModel.CategoryID;                                
            db.Entry(product).State = EntityState.Modified;               
            db.SaveChanges();

            return RedirectToAction("Index");
        }

        return View(viewModel);
    }

Если у вас нет скалярного свойства CatagoryID, вы должны определить его в Product классе

public class Product
{
   public int ID { get; set; }

   //other properties

   public int CategoryID { get; set; }
   public virtual Category Category { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...