[ASP.NET MVC] Operaciones CRUD con el modelo LINQ To SQL

Aunque ahora ando inmersa en otro artículo, también relacionado con esta tecnología, he hecho un break para hablar sobre el uso de las operaciones CRUD mediante el modelo LINQtoSQL de ASP.NET MVC, ya que es un tema que se me ha solicitado varias veces a través del propio blog. Por lo tanto en este artículo vamos a ver como Crear, Leer, Actualizar y Borrar datos de nuestra base de datos, a través de nuestro modelo LINQtoSQL, ya que en un artículo anterior vimos estas mismas operaciones pero trabajando con un modelo ADO.NET Entity Data Model.

Para ello, partimos de un proyecto ASP.NET MVC 2 llamado Example1, al que añadimos una base de datos llamada ExampleDB, que cuenta con una tabla de equipos de balonmano cuyas propiedades son las siguientes TeamID, TeamName, TeamLocation. Una vez creada la base de datos pasamos a configurar el modelo que nos permita interactuar con ella. Dentro de la carpeta Models, hacemos clic con el botón derecho y seleccionamos la opción Add> New Item> LINQ to SQL Classes. Hacemos clic en Add y arrastramos nuestra tabla de datos al modelo, de forma que ya tenemos nuestro contexto de datos creado.

image image

Una vez implementado el modelo, vamos a configurar las acciones que nos permitan trabajar con él. Para ello creamos un nuevo controlador llamado TeamController, y seleccionamos el checkbox que indica que, por defecto, se añadirán las acciones Create, Update, Delete y Details.

image

En primer lugar, dentro de dicho controlador:

1. Añadimos a la referencia a nuestro modelo, para poder utilizar el modelo creado.

  1. using Example1.Models;

2. Creamos una instancia de nuestro contexto de datos

  1. Model2DataContext dbteam = new Model2DataContext();

3.Mostramos nuestro contexto de datos en forma de lista mediante la acción Index()

  1. public ActionResult Index()
  2.         {
  3.             var handballteam = (from ht in dbteam.HandballTeams
  4.                                 select ht).ToList();
  5.  
  6.  
  7.             return View(handballteam);
  8.         }

4.Creamos la vista correspondiente con los siguientes parámetros:

image

De esta forma conseguimos mostrar un listado de nuestros equipos:

image 

El siguiente resultado de acción que vamos a configurar es la opción Create(). Para ello:

1. El método Get de la acción Create() es el que se encarga de mostrarnos el formulario de creación de un nuevo elemento. Mientras que el método Post se encarga de actualizar nuestro contexto de datos con el nuevo elemento creado. Por tanto es en este último en el que añadiremos el siguiente código:

  1. [HttpPost]
  2.         public ActionResult Create([Bind(Exclude=“Id”)]HandballTeam TeamToCreate)
  3.         {
  4.             if (!ModelState.IsValid)
  5.             {
  6.                 return View();
  7.             }
  8.             try
  9.             {
  10.                 // TODO: Add insert logic here
  11.                 dbteam.HandballTeams.InsertOnSubmit(TeamToCreate);
  12.                 dbteam.SubmitChanges();
  13.  
  14.                 return RedirectToAction(“Index”);
  15.             }
  16.             catch
  17.             {
  18.                 return View(TeamToCreate);
  19.             }
  20.         }

2. Creamos la vista correspondiente con los parámetros que se observan en la imagen:

image

Continuamos, con el resultado de acción Edit(). Para ello:

1. Dentro del método Get, añadimos el siguientes código de forma que se nos muestre el elemento a editar, a partir de su id:

  1. public ActionResult Edit(int id)
  2.         {
  3.             var TeamToEdit = dbteam.HandballTeams.SingleOrDefault(x => x.TeamID == id);
  4.  
  5.             return View(TeamToEdit);   
  6.  
  7.         }

2. Dentro del método Post, añadimos el siguiente código que se encargará de guardar los cambios realizados en nuestro elemento:

  1. [HttpPost]
  2.         public ActionResult Edit(int id, HandballTeam TeamToEdit)
  3.         {
  4.             TeamToEdit = dbteam.HandballTeams.SingleOrDefault(x => x.TeamID == id);
  5.             try
  6.             {
  7.                 // TODO: Add update logic here
  8.                 UpdateModel(TeamToEdit);
  9.                 dbteam.SubmitChanges();
  10.                 return RedirectToAction(“Index”);
  11.             }
  12.             catch
  13.             {
  14.                 return View(TeamToEdit);
  15.             }
  16.         }

3. Creamos la vista correspondiente con los parámetros que se observan en la imagen:

image

A continuación, configuramos el resultado de acción Details(). Para ello:

1. Mostramos nuestro contexto de datos en forma de lista mediante la acción Details()

  1. public ActionResult Details(int id)
  2.         {
  3.             return View(dbteam.HandballTeams.SingleOrDefault(x => x.TeamID == id));
  4.         }

2. Creamos la vista correspondiente con los parámetros que se observan en la imagen:

image 

Y por último configuramos el resultado de acción Delete(). Para ello:

1. Dentro del método Get, añadimos el siguientes código de forma que se nos muestre el elemento a eliminar, a partir de su Id:

  1. public ActionResult Delete(int id)
  2.         {
  3.             var TeamToDelete = dbteam.HandballTeams.SingleOrDefault(x => x.TeamID == id);
  4.             return View(TeamToDelete);
  5.         }

2. Dentro del método Post, añadimos el siguiente código para que se encargué de eliminar el elemento seleccionado de la base de datos:

  1. [HttpPost]
  2.         public ActionResult Delete(int id, HandballTeam TeamToDelete)
  3.         {
  4.             TeamToDelete = dbteam.HandballTeams.SingleOrDefault(x => x.TeamID == id);
  5.             try
  6.             {
  7.                 // TODO: Add delete logic here
  8.                 dbteam.HandballTeams.DeleteOnSubmit(TeamToDelete);
  9.                 dbteam.SubmitChanges();
  10.                 return RedirectToAction(“Index”);
  11.             }
  12.             catch
  13.             {
  14.                 return View(TeamToDelete);
  15.             }

3. Creamos la vista correspondiente con los parámetros que se observan en la imagen:

image

De esta forma ya podemos interactuar con nuestra base de datos a través de nuestro modelo y las operaciones creadas.

Aquí os dejo el código del proyecto utilizado para este artículo.

Al igual que este artículo ha surgido gracias a los comentarios de los lectores del blog os animo a que contribuyáis con vuestras dudas o inquietudes, para ir generando contenido de interés. 😉

6 comentarios en “[ASP.NET MVC] Operaciones CRUD con el modelo LINQ To SQL”

  1. y si tengo una base de datos de varias tabalas relacionadas?

    tocaria hacer una interface por tabla?

    por q eso es lo q se ve, ya q cada operacion crud depende exclusivamente de la tabla

  2. Hola Alejandro,
    Cada operación CRUD se aplica sobre un modelo de datos, no sobre una tabla. Por lo tanto si nuestro modelo está formado por un conjunto de tablas relacionadas entre sí, podemos interactuar con ellas sin ningún problema.
    Un ejemplo muy claro de como se trabaja con un modelo formado por dos tablas relacionadas, es el que puedes encontrar en la página oficial de asp.net mvc, para la aplicación Nerdinner:

    http://www.asp.net/mvc/tutorials/build-a-model-with-business-rule-validations

    Espero que te sirva de ayuda
    Un saludo

  3. Me sale este error me puedes ayudar o decir q es y como resolverlo

    El diccionario de parámetros contiene una entrada NULL para el parámetro ‘id’ del tipo que no acepta valores NULL ‘System.Int32’ del método ‘System.Web.Mvc.ActionResult Edit(Int32)’ en ‘LogiManta.Controllers.CargoController’. Un parámetro opcional debe ser un tipo de referencia, un tipo que acepte valores NULL o debe declararse como parámetro opcional.
    Nombre del parámetro: parameters

  4. tenes idea de como hacer este crud, en una tabla editable?, o sea todas las operaciones sobre la misma tabla… muy buen aporte, ideal para los que estamos aprendiendo.. saludos.

  5. Hola Rolan,
    En el ejemplo que se muestra en este artículo, todas las operaciones se hacen sobre una misma tabla. Lo que tienes que tener en cuenta es que la forma de interactuar con la base de datos,es a través del Modelo.
    Un saludo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *