MVC вставка / обновление в контроллере - PullRequest
1 голос
/ 18 февраля 2011

У меня есть следующее в моем контроллере (для вставки / или / обновления новостной сущности). Я использую EF POCO

       public class NewsViewModel
       {
           /// <summary>
           /// Initializes a new instance of the <see cref="NewsViewModel"/> class. 
           /// </summary>
           public NewsViewModel()
           {
               this.News = new News();
               this.Categories = new List<int>();
           }

           /// <summary>
           /// Gets or sets news.
           /// </summary>
           public News News { get; set; }

           /// <summary>
           /// Gets or sets categories.
           /// </summary>
           public IEnumerable<SelectListItem> SelectCategories { get; set; }

           /// <summary>
           /// Gets or sets GroupIn.
           /// </summary>
           public IEnumerable<int> Categories { get; set; }
    }


    [HttpPost]
    public ActionResult Edit(NewsViewModel row)
    {
        if (!ModelState.IsValid)
        {
            return View(row);
        }

        // Insert record
        if (row.News.NewsId == 0)
        {
            foreach (var item in row.Categories)
            {
                row.News.NewsCategory.Add(this.NewsCategoryRepository.GetRow(item));
            }

            this.NewsRepository.Insert(row.News);
        }
        else
        {
            // Update
            var updateRow = this.NewsRepository.GetRow(row.News.NewsId);
            updateRow.Title = row.News.Title;
            updateRow.ShortDescription = row.News.ShortDescription;
            updateRow.IsActive = row.News.IsActive;
            updateRow.PostDate = row.News.PostDate;
            updateRow.ArchiveDate = row.News.ArchiveDate;
            updateRow.LongDescription = row.News.LongDescription;
            updateRow.NewsCategory.Clear();
            foreach (var item in row.Categories)
            {
                updateRow.NewsCategory.Add(this.NewsCategoryRepository.GetRow(item));
            }


            this.NewsRepository.Update(updateRow);
        }

        this.NewsRepository.Context.SaveChanges();
        return this.RedirectToAction("Index");
    }
  1. Это лучший способ выполнить обновление? то есть очистить все категории, затем заново вставить и обновить?
  2. При обновлении есть более чистый способ, чем вытащить updateRow, пересмотреть значения и обновить его?

1 Ответ

4 голосов
/ 18 февраля 2011

Прежде всего.Ответственность Контроллера не состоит в том, чтобы выполнять задачи, ориентированные на базу данных, поэтому:

  • Lests ваш класс репозитория выполняет любые операции CRUD

, затем передает ваш объект только от контроллера к репозиторию, напримеркоторый может смотреть ваш репозиторий и использование контроллера:

public class NewsRepository : IRepository
{
    public void SaveOrUpdate(NewsViewModel news) 
    { 
        //if isNew then Save else Update
    }
    //public void Delete(NewsViewModel newsToDel){}
    //public NewsViewModel GetById(int newsId){}
}



public class NewsController : Controller
{
    private IRepository _newsRepository;
    public NewsController(IRepository newsRepository)
    {
        //passed from IoC container like StructureMap or instantiate it by your own here.
        _newsRepository = newsRepository;
    }

    [HttpPost]
    public ActionResult Edit(NewsViewModel row)
    {
        _newsRepository.SaveOrUpdate(rowEntity);
    }

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