MVC 3 / EF 4.2 - Редактирование в ViewModel, сохранить в Model или ViewModel? - PullRequest
1 голос
/ 10 февраля 2012

Мой первый сайт MVC3 EF 4.2, и я запутался в некоторых вещах, в настоящее время в ViewModels при запросах и сохранении. Пожалуйста, поправьте меня, если я плохо объясню это, я не уверен, как это назвать. .Edmx автоматически создал классы таблиц, но я прочитал, что было бы лучше создать ViewModel, учитывая, что мне нужно объединить таблицы, чтобы полностью отобразить / отредактировать мой продукт. В приведенном ниже коде контроллера я объединяю таблицы, чтобы вывести продукт для редактирования, а затем сохранить. Мой вопрос - как правильно сохранить Продукт, в модель Product.cs, сгенерированную DbContext или в моем собственном ProductViewModel.cs?

Есть ли более простой способ запросить продукт и объединить таблицы, а затем сопоставить их с параметрами viewmodels, или я продолжаю делать все это в контроллере, как показано ниже?

Я также хочу сохранять / обновлять продукт каждый раз, когда кто-то просматривает / нажимает на него, поэтому я не был уверен, создаю ли я отдельную ViewModel для обновления только этого параметра или снова, использую модель Product.

Надеюсь, это имеет смысл! Я могу объяснить дальше, если это необходимо.

private SiteForgeEntities db = new SiteForgeEntities();

public ActionResult Edit(int id)
    {
        var viewModel = (
            from a in db.Products
            join b in db.Sites
            on a.SiteId equals b.SiteId
            join c in db.Sections
            on a.SectionId equals c.SectionId
            join d in db.Affiliates
            on a.AffiliateId equals d.AffiliateId
            select new ProductViewModel()
            {
                ProductId = a.ProductId,
                Product = a.Product,
                Description = a.Description,
                Image = a.Image,
                Price = a.Price,
                Clicks = a.Clicks,
                Link = a.Link,        
                Site = b.Site,
                Section = c.Section,
                Affiliate = d.Affiliate
            }).Single(x => x.ProductId == id);      

        return View(viewModel);
    }

    [HttpPost]       
    public ActionResult Edit(Product product)
    {
     ...update database...do I pass in and save back to Product or my ProductViewModel
    }

1 Ответ

0 голосов
/ 10 февраля 2012

Вы используете ViewModel для передачи нескольких моделей в представление, но когда вы сохраняете данные, вам необходимо сохранить их в соответствующей модели. Если вы добавляете или изменяете продукты, вы добавляете элементы в продукты (используя ваш DbContext). Если между двумя моделями определено отношение «один ко многим» (в вашей модели Product.cs у вас может быть свойство, объявленное как:

public virtual ICollection<SomeOtherModel> SomeOtherData { get; set; }

Вы можете использовать это для построения таблицы вместо передачи всего во ViewModel. Здесь есть хорошее руководство по операциям CRUD с использованием EF4. Взгляните на эти короткие учебники, которые могут дать вам представление о вашей стратегии http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...