How to avoid loading a LINQ to SQL object twice when editting it on a website.

Posted by emzero on Stack Overflow See other posts from Stack Overflow or by emzero
Published on 2010-04-09T22:00:10Z Indexed on 2010/04/09 22:03 UTC
Read the original article Hit count: 348

Filed under:
|
|

Hi guys

I know you are all tired of this Linq-to-Sql questions, but I'm barely starting to use it (never used an ORM before) and I've already find some "ugly" things. I'm pretty used to ASP.NET Webforms old school developing, but I want to leave that behind and learn the new stuff (I've just started to read a ASP.NET MVC book and a .NET 3.5/4.0 one).

So here's is one thing I didn't like and I couldn't find a good alternative to it.

In most examples of editing a LINQ object I've seen the object is loaded (hitting the db) at first to fill the current values on the form page. Then, the user modify some fields and when the "Save" button is clicked, the object is loaded for second time and then updated.

Here's a simplified example of ScottGu NerdDinner site.

//
// 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 });
}

As you can see the dinner object is loaded two times for every modification. Unless I'm missing something about LINQ to SQL caching the last queried objects or something like that I don't like getting it twice when it should be retrieved only one time, modified and then comitted back to the database.

So again, am I really missing something? Or is it really hitting the database twice (in the example above it won't harm, but there could be cases that getting an object or set of objects could be heavy stuff).

If so, what alternative do you think is the best to avoid double-loading the object?

Thank you so much, Greetings!

© Stack Overflow or respective owner

Related posts about linq-to-sql

Related posts about ASP.NET