Вызов UpdateModel в контроллере происходит по шаблону MVC ??Как я могу сделать то же самое на уровне модели? - PullRequest
0 голосов
/ 19 января 2011

новичок, я новичок в MVC 2 C # и использую EntityFramework с LINQ.

Во многих примерах (включая MVC 2 MusicStore от Microsoft) я заметил, что обновления базы данных производятся вКонтроллеры слоев.Например, если я хочу обновить продукт базы данных, я вызываю UpdateModel (product, "Products") и вызываю SaveChanges () в классе ProductController

Хорошо, просто и легко, но это следующий MVC«традиционный» шаблон ??

Вместо этого я пытаюсь делегировать ответственность классу ProductModel (я успешно справился с добавлением и удалением с помощью AutoMapper), но не нахожуспособ обновления из модели Я пробовал что-то вроде

        Mapper.CreateMap<Product, ProductModels>();
        Mapper.CreateMap<ProductModels, Product>();
        var p = Mapper.Map<Product, ProductModels>(prod);

        productosBD.AttachTo("Products", p); 
        productosBD.SaveChanges();

но никак ...

Может кто-нибудь сказать мне, как я могу обновить сущность в слое модели ??

Заранее спасибо

1 Ответ

1 голос
/ 19 января 2011

ASP NET MVC сильно эволюционировал от бета-версии 1 до версии 2 и теперь версии 3, хотя 2 и 3 гораздо более похожи.

Множество таких примеров связано с MVC 1 - чему я научился на собственном опыте. Я довольно новичок в ASP NET MVC, но понял, что в MVC 2 ModelBinder выглядит после обновления модели, поэтому обычно, если вы определяете сигнатуру вашего метода в качестве модели, вам не нужно вызывать UpdateModel. * 1006. *

Например:

 public ActionResult Create(MyModel model)
 {
      ... // no need to call UpdateModel

Однако, если вы определите это так, то вам нужно сделать это:

 public ActionResult Create(int id, FormCollection collection)
 {
      MyModel model = Repository.Get(id); // in your case EF productosBD.Where(x=>x.Id = id)
      UpdateMode(model, collection);
      Repository.Save(model);

С точки зрения того, где происходит обновление, да, оно будет происходить в вашем контроллере, но это зависит от того, используете ли вы шаблон репозитория или используете пустой контекст базы данных. Я лично использую ServiceProxy, который затем обращается к службе WCF, которая обращается к Manager, которая использует Repository для этого.

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