Я знаю, что вы все устали от этих вопросов Linq-to-Sql, но я только начинаю его использовать (никогда раньше не использовал ORM), и я уже нашел некоторые "уродливые" вещи. Я довольно привык к разработке старой школы ASP.NET Webforms, но я хочу оставить это позади и изучить новые вещи (я только начал читать книгу ASP.NET MVC и одну .NET 3.5 / 4.0).
Так что вот одна вещь, которая мне не понравилась, и я не смог найти хорошую альтернативу ей.
В большинстве примеров редактирования объекта LINQ, который я видел, объект загружается (ударяется о БД) сначала, чтобы заполнить текущие значения на странице формы. Затем пользователь изменяет некоторые поля, и когда нажимается кнопка «Сохранить», объект загружается второй раз, а затем обновляется.
Вот упрощенный пример сайта ScottGu NerdDinner.
//
// GET: /Dinners/Edit/5
[Authorize]
public ActionResult Edit(int id) {
Dinner dinner = dinnerRepository.GetDinner(id);
return View(new DinnerFormViewModel(dinner));
}
//
// POST: /Dinners/Edit/5
[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Edit(int id, FormCollection collection) {
Dinner dinner = dinnerRepository.GetDinner(id);
UpdateModel(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
Как вы можете видеть, объект ужин загружается два раза для каждой модификации. Если я не пропускаю что-то о кэшировании LINQ to SQL последних запрашиваемых объектов или что-то в этом роде, мне не нравится получать его дважды, когда его нужно получить только один раз, изменить и затем вернуть обратно в базу данных.
Итак, я действительно что-то упускаю? Или это действительно двойной удар по базе данных (в приведенном выше примере это не повредит, но могут быть случаи, когда получение объекта или набора объектов может быть тяжелым занятием).
Если да, то какая альтернатива, по вашему мнению, лучше всего избегать двойной загрузки объекта?
Большое спасибо,
Привет! * * 1016