Я удивлен, что, несмотря на то, что потратил довольно много времени на поиск ответа, я не нашел его в inte rnet сам. Что еще более удивляет меня, так это то, что люди склонны сравнивать Attach to Add, а не с Update. Кроме того, я нашел очень мало упоминаний о реальном методе обновления, несмотря на то, что он, казалось бы, является наиболее очевидным выбором для желаемой операции изменения.
Из материалов, которые мне удалось найти, я понял, что Attach следует использовать, когда Вы знаете, что объект существует где-то в базе данных. Если вы не внесете в него изменения, никакие операции над объектом не будут выполнены, а если вы это сделаете - он будет обновлен. Но тогда зачем вам обновление, если оно делает то же самое из его звука?
У меня есть этот фрагмент кода, который я взял из курса udemy.
MovieController.cs
[HttpPut("{id}")]
public IActionResult ReplaceMovie(long id, [FromBody] Movie m)
{
if (ModelState.IsValid)
{
////
// logic in question starts here vvv
////
m.MovieId = id;
if (m.Studio != null && m.Studio.StudioId != 0)
{
context.Attach(m.Studio);
}
context.Update(m);
context.SaveChanges();
return Ok();
}
else
{
return BadRequest(ModelState);
}
}
Но тогда почему бы просто не сделать это таким образом?
m.MovieId = id;
context.Update(m);
context.SaveChanges();
return Ok();
Не приведет ли это к тому же результату, поскольку мы знаем, что в случае с Mov ie ему уже присвоено значение Studio, затем оно (Studio) существует в базе данных, и нам не нужно вносить в него какие-либо изменения?
Теперь, если мы применили некоторые изменения к mov ie AND к Студийные объекты, тогда не было бы безопаснее просто выполнить модификации обновлений в их отдельных контроллерах? Например, если я хочу обновить mov ie и студию, я сначала вызову StudioController, который будет выполнять операцию модификации в Studio, а затем вызову MovieController для обновления mov ie.
Какой подход будет оптимальным для лучшей гибкости и ясности? Что я должен знать об Присоединении и Обновлении в целом?