El post que buscas se encuentra eliminado, pero este también te puede interesar

Mantenimiento a BD Usando Entity Framework y Linq

Nuevamente por aquí con un post que les puede ser de gran ayuda a muchos, el post fue a petición de un un usuario de Codemania foro de programacion al que invito a que se registren y compartan sus dudas que con gusto serán respondidas.

Siempre que desarrollamos aplicaciones que usan bases de datos nos vemos en la necesidad de agregar, editar, eliminar o buscar registros pues bien ahora veremos como hacer todas estas operaciones usando entity framework y linq.

Para este ejemplo desarrolle una aplicación en 2 capas y utilizo una base de datos llamada Database que tiene una tabla llamada Personas.


Mantenimiento a BD Usando Entity Framework y Linq

El ejemplo esta desarrollado con visual estudio 2010 en c# y vb.net


Lo primero que aremos es crear el modelo conceptual de nuestra base de datos para eso agregamos un nuevo elemento y elegimos entity data model y seguimos los pasos necesarios para que el visual estudio nos cree nuestra clase y propiedades de nuestra tabla personas.

c#

.net


Ahora que ya tenemos nuestro modelo entity de nuestra tabla creado empezaremos a programar todas las operaciones agregamos una clase llamada Datos.cs o Datos.vb.

Para cada operación crearemos un método comenzaremos con el método que recupera todos los registros de nuestra tabla.
public static List<Personas> CargarDatos()
{
    using (DatabaseEntities bd = new DatabaseEntities())
    {
       var datos = (from p in bd.Personas select p).ToList();
 
        return datos;
    }
}

Public Shared Function CargarDatos() As List(Of Personas)
      Using bd As New DatabaseEntities()
          Dim datos = (From p In bd.Personas Select p).ToList()
 
          Return datos
      End Using
  End Function

Lo que hacemos es crear un método que retornara una lista de tipo personas y dentro del método creamos una instancia de nuestro modelo y con linq hacemos la consulta para que nos muestre todos los registros que hay en la tabla personas es como hacerle un select a toda la tabla.

Ahora creamos el método que nos servirá para buscar registros por medio del nombre.
public static List<Personas> Buscar(string nombre)
{
    using (DatabaseEntities bd = new DatabaseEntities())
    {
        var buscar = (from p in bd.Personas
                      where p.Nombre.StartsWith(nombre)
                      select p).ToList();
 
        return buscar;               
    }
}

Public Shared Function Buscar(ByVal nombre As String) As List(Of Personas)
      Using bd As New DatabaseEntities()
          Dim busca = (From p In bd.Personas
                       Where p.Nombre.StartsWith(nombre)
                       Select p).ToList()
 
          Return busca
      End Using
  End Function

Como podemos ver es parecido al anterior lo único que cambia es la consulta linq como lo que queremos hacer es buscar registros por nombre aremos uso de where para filtrar los registros por medio del nombre también hacemos uso de StartsWith que es algo similar al like de sql para que por ejemplo si escribimos la letra c se nos mostraran todos los registros que empiecen con la letra c.

Ahora creemos el método que nos servirá para agregar registros.
public static void Agregar(string nombre, string apellido, int edad,string profesion)
      {
          using (DatabaseEntities bd = new DatabaseEntities())
          {
              bd.Personas.AddObject(new Personas { Nombre = nombre, Apellido = apellido, Edad = edad, Profesion = profesion });
              bd.SaveChanges();
          }
      }

Public Shared Sub Agregar(ByVal nombre As String, ByVal apellido As String, ByVal edad As Integer, ByVal profesion As String)
      Using bd As New DatabaseEntities()
          bd.Personas.AddObject(New Personas() With {.Nombre = nombre, .Apellido = apellido, .Edad = edad, .Profesion = profesion})
          bd.SaveChanges()
      End Using
  End Sub

Lo que hacemos aquí es crear un método que recibirá los parámetros necesarios para agregar un registro, luego como en todos los métodos creamos una instancia de nuestro modelo y hacemos uso del método AddObject para agregar un un nuevo objeto(registro) de tipo persona y guardamos los datos en nuestra bd con el método SaveChanges.

Ahora creamos el método para editar los registros.
public static void Editar(int id,string nombre, string apellido, int edad, string profesion)
      {
          using (DatabaseEntities bd = new DatabaseEntities())
          {
              var editar = (from p in bd.Personas
                            where p.Id == id
                            select p).Single();
 
              editar.Nombre = nombre;
              editar.Apellido = apellido;
              editar.Edad = edad;
              editar.Profesion = profesion;
              bd.SaveChanges();
          }
      }

Public Shared Sub Editar(ByVal id As Integer, ByVal nombre As String, ByVal apellido As String, ByVal edad As Integer, ByVal profesion As String)
      Using bd As New DatabaseEntities()
          Dim editar = (From p In bd.Personas
                        Where p.Id = id
                        Select p).Single()
 
          editar.Nombre = nombre
          editar.Apellido = apellido
          editar.Edad = edad
          editar.Profesion = profesion
          bd.SaveChanges()
      End Using
  End Sub

Al igual que el anterior creamos un método que recibirá los parámetros necesarios para editar un registro y luego haciendo uso de linq hacemos una consulta para recuperar el registro a editar y le asignamos los nuevos valores.

Ahora veremos el método que nos servirá para eliminar un registro.
public static void Eliminar(int id)
      {
          using (DatabaseEntities bd = new DatabaseEntities())
          {
              var eliminar = (from p in bd.Personas
                              where p.Id==id
                              select p).Single();
 
              bd.DeleteObject(eliminar);
              bd.SaveChanges();
          }
      }

Public Shared Sub Eliminar(ByVal id As Integer)
      Using bd As New DatabaseEntities()
          Dim eliminar = (From p In bd.Personas
                          Where p.Id = id
                          Select p).Single()
 
          bd.DeleteObject(eliminar)
          bd.SaveChanges()
      End Using
  End Sub

Creamos un método que recibirá un parámetro que sera el id por el cual eliminaremos el registro y haciendo uso de linq recuperamos el registro por medio del id y luego eliminamos el registro con el método DeleteObject.

Por ultimo crearemos un método que nos servirá para cargar en nuestro formulario de edición los datos del registro que queremos editar.
public static Personas ObtenerId(int id)
      {
          Personas persona = new Personas();
          using (DatabaseEntities bd = new DatabaseEntities())
          {
              var regis = (from p in bd.Personas
                            where p.Id==id
                            select p).Single();
 
              persona.Id = regis.Id;
              persona.Nombre = regis.Nombre;
              persona.Apellido = regis.Apellido;
              persona.Edad = regis.Edad;
 
              return persona;
          }
      }

Public Shared Function ObtenerId(ByVal id As Integer) As Personas
      Dim persona As New Personas()
      Using bd As New DatabaseEntities()
          Dim regis = (From p In bd.Personas
                       Where p.Id = id
                       Select p).Single()
 
          persona.Id = regis.Id
          persona.Nombre = regis.Nombre
          persona.Apellido = regis.Apellido
          persona.Edad = regis.Edad
 
          Return persona
      End Using
  End Function

Lo que hacemos es crear un método de tipo personas que recibirá el id como parámetro y luego haciendo uso de linq recuperamos el registro y le asignamos a cada propiedad de nuestra clase persona los datos obtenidos en la consulta y por ultimo retornamos los datos.

Eso seria todo en nuestra clase datos.

Ahora pasemos a diseñar nuestros formularios para este caso serán 3 el principal que sera donde se mostraran los datos en un datagrid ademas se podrá hacer la búsqueda de registros y tendrá 3 botones que serán para agregar editar y eliminar un registro.

Base de Datos


También creamos los formularios que nos servirán para agregar y editar los registros.

vb.net

LINQ


Ahora empezaremos a programar en nuestros formularios empecemos con el form1 o formulario principal, comenzaremos con el código que nos servirá para cargar los datos y hacer la búsqueda.
public void cargar()
      {
          dataGridView1.DataSource = Datos.CargarDatos();
      }
 
      private void Form1_Load(object sender, EventArgs e)
      {
          cargar();
      }
 
      private void btnbuscar_Click(object sender, EventArgs e)
      {
          dataGridView1.DataSource = Datos.Buscar(txtnombre.Text);
      }

Public Sub cargar()
      dataGridView1.DataSource = Datos.CargarDatos()
  End Sub
 
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      cargar()
  End Sub
 
  Private Sub btnbuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnbuscar.Click
      dataGridView1.DataSource = Datos.Buscar(txtnombre.Text)
  End Sub

El código es sencillo y fácil de entender así que no entrare en mayor explicación primero creamos un método donde se cargan los datos y luego en el evento load cargamos los datos y luego en el evento del botón buscar llamamos el método buscar y le enviamos el parámetro para obtener los datos.

Ahora veamos como agregar un nuevo registro.
//cargar datos al cerrar form agregarregistro y actualizar
      private void obj_FormClosed(object sender, FormClosedEventArgs e)
      {
          cargar();
      }
 
      private void btnagregar_Click(object sender, EventArgs e)
      {
          Form2 obj = new Form2();
          //abrir el otro formulario y actualizar datagrid al cerrarlo
          obj.FormClosed += new System.Windows.Forms.FormClosedEventHandler(obj_FormClosed);
          obj.Show();
      }

'cargar datos al cerrar form agregarregistro y actualizar
  Private Sub obj_FormClosed(ByVal sender As Object, ByVal e As FormClosedEventArgs)
      cargar()
  End Sub
 
  Private Sub btnagregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnagregar.Click
      Dim obj As New Form2()
      'abrir el otro formulario y actualizar datagrid al cerrarlo
      AddHandler obj.FormClosed, New System.Windows.Forms.FormClosedEventHandler(AddressOf obj_FormClosed)
      obj.Show()
  End Sub

Vemos que primero creamos un método que nos servirá para detectar el cierre tanto del formulario para agregar registro como el de editar esto lo hacemos para actualizar los datos siempre que hagamos cambios desde los 2 formularios, luego en el evento del botón llamamos al form2 que es donde agregamos un nuevo registro.

Ahora veamos como editamos y eliminamos un registro.
private void btneditar_Click(object sender, EventArgs e)
      {
          DataGridViewRow row = dataGridView1.CurrentRow;
          int id = Convert.ToInt32(row.Cells[0].Value);
 
          Form3 obj = new Form3(id);
          obj.FormClosed += new System.Windows.Forms.FormClosedEventHandler(obj_FormClosed);
          obj.Show();
 
      }
 
      private void btneliminar_Click(object sender, EventArgs e)
      {
          DialogResult resul = MessageBox.Show("Seguro que quiere eliminar el Registro?", "Eliminar Registro", MessageBoxButtons.YesNo);
          if (resul == DialogResult.Yes)
          {
              DataGridViewRow row = dataGridView1.CurrentRow;
              int idpersona = Convert.ToInt32(row.Cells[0].Value);
              Datos.Eliminar(idpersona);
              MessageBox.Show("Se Elimino el Registro Con Numero ID: " + idpersona, "Eliminar Registro");
              cargar();
          }
      }

Private Sub btneditar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btneditar.Click
      Dim row As DataGridViewRow = dataGridView1.CurrentRow
      Dim id As Integer = Convert.ToInt32(row.Cells(0).Value)
 
      Dim obj As New Form3(id)
      AddHandler obj.FormClosed, New System.Windows.Forms.FormClosedEventHandler(AddressOf obj_FormClosed)
      obj.Show()
  End Sub
 
  Private Sub btneliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btneliminar.Click
      Dim resul As DialogResult = MessageBox.Show("Seguro que quiere eliminar el Registro?", "Eliminar Registro", MessageBoxButtons.YesNo)
      If resul = DialogResult.Yes Then
          Dim row As DataGridViewRow = dataGridView1.CurrentRow
          Dim idpersona As Integer = Convert.ToInt32(row.Cells(0).Value)
          Datos.Eliminar(idpersona)
          MessageBox.Show("Se Elimino el Registro Con Numero ID: " & idpersona, "Eliminar Registro")
          cargar()
      End If
  End Sub

En el evento click del botón editar igual que el anterior abrimos el form3 que es el que nos servirá para editar los registros y actualizamos los datos al cerrarlo, algo importante es que al form3 le enviamos el id del registro a editar.

Y en el evento del botón eliminar lo único que hacemos es eliminar el registro seleccionado en el datagrid pasandole como parametro el id del registro seleccionado a nuestro metodo eliminar.

Ahora pasamos al código del form2 que es en el que agregamos los registros.
private void btnaceptar_Click(object sender, EventArgs e)
{
    DataAcces.Datos.Agregar(txtnombre.Text,txtapellido.Text,Convert.ToInt32(txtedad.Text),cbbprofesion.SelectedItem.ToString());
    MessageBox.Show("Registro Agregado...","Agregar Registro");
    this.Close();
}

Private Sub btnaceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaceptar.Click
      DataAcces.Datos.Agregar(txtnombre.Text, txtapellido.Text, Convert.ToInt32(txtedad.Text), cbbprofesion.SelectedItem.ToString())
      MessageBox.Show("Registro Agregado...", "Agregar Registro")
      Me.Close()
  End Sub

Aquí lo único que hacemos es llamar al metodo agregar y le enviamos los datos necesarios para agregar un registro.

Y por ultimo en nuestro form3 tendremos el siguiente codigo.
private int id;
      public Form3(int idempleado)
      {
          InitializeComponent();
          id = idempleado;
      }
 
      private void Form3_Load(object sender, EventArgs e)
      {
          // se carga el registro que se quiere editar
           cbbprofesion.SelectedIndex = 0;
           Personas persona = Datos.ObtenerId(id);
           id = persona.Id;
           txtnombre.Text = persona.Nombre;
           txtapellido.Text = persona.Apellido;
           txtedad.Text = persona.Edad.ToString();        
      }
 
      private void btnaceptar_Click(object sender, EventArgs e)
      {
          Datos.Editar(id,txtnombre.Text,txtapellido.Text,Convert.ToInt32(txtedad.Text),cbbprofesion.SelectedItem.ToString());
          MessageBox.Show("Registro Actualizado...", "Actualizar Registro");
          this.Close();
      }

Private id As Integer
  Public Sub New(ByVal idempleado As Integer)
      InitializeComponent()
      id = idempleado
  End Sub
 
  Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      ' se carga el registro que se quiere editar
      cbbprofesion.SelectedIndex = 0
      Dim persona As Personas = Datos.ObtenerId(id)
      id = persona.Id
      txtnombre.Text = persona.Nombre
      txtapellido.Text = persona.Apellido
      txtedad.Text = persona.Edad.ToString()
  End Sub
 
  Private Sub btnaceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaceptar.Click
      Datos.Editar(id, txtnombre.Text, txtapellido.Text, Convert.ToInt32(txtedad.Text), cbbprofesion.SelectedItem.ToString())
      MessageBox.Show("Registro Actualizado...", "Actualizar Registro")
      Me.Close()
  End Sub

Aqui lo que hacemos es primeramente obtener los datos del registro a editar en el evento load eso lo hacemos con el metodo ObtenerId y le enviamos como parametro el dato recibido del formulario principal.

Y en el evento del boton llamamos a nuestro metodo Editar y le enviamos los parametros para editar el registro.

eliminar registros

Bueno eso es todo por ahora, como podemos notar usar entity framework y linq nos facilita el trabajo para trabajar con bases de datos.

Para descargar los proyectos del ejemplo lo pueden hacer desde mi blog.
http://cristiantorresalfaro.blogspot.com/2012/06/mantenimiento-bd-usando-entity.html

Y no se olviden pasar por Codemania

Saludos desde El Salvador

entity framework

Fuentes de Información - Mantenimiento a BD Usando Entity Framework y Linq

El contenido del post es de mi autoría, y/o, es un recopilación de distintas fuentes.

Dar puntos
64 Puntos
Votos: 0 - T!score: 0/10
  • 0 Seguidores
  • 4.963 Visitas
  • 18 Favoritos

12 comentarios - Mantenimiento a BD Usando Entity Framework y Linq

@Mondongo_Peludo Hace más de 2 años -5
Uso Linux.
@metalfiller Hace más de 2 años
krizztorres dijo:
Mondongo_Peludo dijo:Uso Linux.

Pues existe el proyecto mono donde podes usar la plataforma .net en linux


¿Pero Visual Basic .NET no era que prácticamente no se usaba en Linux?

C# sí tiene implementaciones. Con ese lenguaje no hay excusas

Una pregunta, ¿qué tipo de base de datos usa?

Linq es un tipo de bases de datos como ASP.NET, MySQL o SQLServer?
@el_tuerto Hace más de 2 años
Gracias por el aporte, mis 10!
@avrileroxtreme Hace más de 2 años
ultimamente me estoy topando con bd integradas en el mismo proyecto ai estan tus 10
@alxBL Hace más de 2 años
muy buen post, no tengo experiencia con Linq pero se ve muy interesante. A favoritos, te dejo puntos y saludos desde Guatemala
@RMC08 Hace más de 2 años
Esta buena la explicacion y yo andaba buscando info sobre entity para ver si era mas facil...
Veo que NO, me quedo con mi metodo de conectarme a la base por un dataset tipado con tableadapters, ahi es donde uno les hace las consultas SQL sobre los tableadapters, directamente tiramos select, insert y demas comandos SQL en los tableadapters,
despues los llamamos en el boton en cuestion, tipo Me.Datasetuno.tableadapter .... etc
@matias22rhcp Hace más de 1 año
muy bueno, al igual q tu ejemplo de capas..ahora, que opinas de implementar las consultas (altas-bajas-modif-seleccion) con SP en lugar de LINQ??
@krizztorres Hace más de 1 año
Hola.
Si la idea es usar SP entonces no aconsejaria usar un ORM como es Entity Framework ya que al usar SP no estas aprovechando las ventajas que EF ofrece(OJO no estoy diciendo que usar sp no sea una buena idea, si no que con ef no seria util hacerlo), si usas SP aconsejo que entonces uses las clases ado.net para el manejo de datos.

Saludos.
@matias22rhcp Hace más de 1 año
@krizztorres claro, mi intencion era sobre todo para generar automaticamente las clases de las entidades con DbContext como lo haces en tu ejemplo de 3 capas, me aconsejas entonces realizar dichas clases en forma manual?
@krizztorres Hace más de 1 año
@matias22rhcp si te aconsejaria que crees mananuales las clases entidades y utilizes las clases ado.net para recuperar los datos de los sp, ya que como te lo mencione si no usaras linq no veo la razon porque usar EF.

Saludos.