asp.net mvc - MVC insert/update in controller -
i have following in controller (to insert/or/update news entity). i'm using ef poco
public class newsviewmodel { /// <summary> /// initializes new instance of <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"); }
- is best way perform update? clear categories re-insert , update?
- when updating there cleaner way pull out updaterow, reassing values , update it?
first of all. controller responsibility not perform database centric tasks, so:
- lests repository class make crud operations
then pass object controller repository example can looks repository , controller usage:
public class newsrepository : irepository { public void saveorupdate(newsviewmodel news) { //if isnew 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 ioc container structuremap or instantiate own here. _newsrepository = newsrepository; } [httppost] public actionresult edit(newsviewmodel row) { _newsrepository.saveorupdate(rowentity); } }
Comments
Post a Comment