Можно ли использовать Upsert для метода контроллера или следует разделить на Update и Insert?
Недавно я завершил онлайн-руководство, в котором инструктор объединил свои вызовы Update и Insert в один метод Upsert:
[HttpGet]
public IActionResult Upsert(int? id)
{
SelectListViewModel<Attraction> attraction = new SelectListViewModel<Attraction>()
{
Entity = new Attraction(),
Cities = new SelectList(_db.Cities.OrderBy(c=>c.Name),"Id","Name")
};
if (id != null) //if id exists its an edit, else its create
{
attraction.Entity = _db.Attractions.FirstOrDefault(a => a.Id == id);
}
return View(attraction);
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Upsert([Bind("Id,Name,Description,CityId")]Attraction attraction)
{
if (ModelState.IsValid)
{
if (attraction.Id == 0)
{
_db.Attractions.Add(attraction);
}
else {
var attractionFromDb = _db.Attractions.FirstOrDefault(a => a.Id == attraction.Id);
_db.Attractions.Update(attractionFromDb);
}
_db.SaveChanges();
return RedirectToAction(nameof(Index));
}
return View(attraction);
}
Я собираюсь начать свой собственный проект, и я хочу использовать эффективный код, но я понимаю, что это нарушает принцип единой ответственности, поэтому в основном я просто задавался вопросом, приемлем ли этот способ или его следует разделить на обновление и вставку?