我的控制器中有以下内容(插入/或/更新新闻实体)。我正在使用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");
}
答案 0 :(得分:4)
首先。 Controller的职责不是执行以数据库为中心的任务,所以:
然后只将您的对象从Controller传递到Repository,例如,它可以查看您的Repository和Controller用法:
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);
}
}