11.20.2010

Actualizar una Entidad Utilizando el ObjectDataSource y el EntityFramework

Continuando con el post respecto a utilizar el EntityFramework en conjunto con el ObjectDataSource en una aplicación ASP.NET, vamos a ver como actualizar una entidad utilizando esta combinación de componentes. En primera instancia vamos a tener una tabla de usuarios la cual una vez creado el modelo en el EntityFramework vamos a tener una estructura como la que se ve en la siguiente figura.

image

Luego procedemos a crear nuestra lógica de negocio en donde vamos a tener un método que nos permite obtener una instancia única del contexto de las entidades del modelo del EntityFramework, este método lo podemos ver a continuación.

Public Class SeguridadBL
Public Shared Contexto As SeguridadEntities

Public Shared Function ObtenerContexto() As SeguridadEntities
If Contexto Is Nothing Then
Contexto = New SeguridadEntities
End If
Return
Contexto
End Function


El siguiente método es el que nos sirve para actualizar la entidad. Como podemos ver en el método, vamos a recibir una instancia de una variable tipo Usuario, la cual vamos a tener que trabajar un poco más para poder actualizar los datos en la base de datos.



    Public Function ActualizarUsuario(ByVal pUsuario As Usuario) As Integer

Dim
resultado = From u In ObtenerContexto.Usuarios _
Where u.Id = pUsuario.Id _
Select u
Dim tmpUsuario As Usuario = resultado.SingleOrDefault
tmpUsuario.Nombre = pUsuario.Nombre
tmpUsuario.Apellido1 = pUsuario.Apellido1
tmpUsuario.Apellido2 = pUsuario.Apellido2
tmpUsuario.Activo = pUsuario.Activo
tmpUsuario.Email = pUsuario.Email
tmpUsuario.Password = pUsuario.Password
Return ObtenerContexto.SaveChanges()
End Function



Como la instancia de la clase usuario que viene en el parámetro no pertence al contexto actual que estamos utilizando, vamos a tener agregarla al contexto. Sin embargo, para poder agregar la instancia, tendríamos que agregarle el entityKey, el cuál de por si ya existe en el contexto. En este caso, vamos a ir a traer la instancia utilizando una simple operación de select y luego, le vamos a setear los valores desde la instancia que viene por parámetro – en mi opinión una solución no muy elegante, pero al parecer la más practica. Pot último, le decimos al contexto que guarde los cambios en la base de datos con SaveChanges.



Del lado de la página ASP.NET, vamos a crear un objeto del tipo ObjectDataSource y vamos a proceder a configurarlo de la siguiente manera:



1. Primero seleccionamos la clase desde la cual vamos a tener el método de actualización, en nuestro caso SeguridadBL.



image



2. Luego procedemos a configurar el método de actualización. Cuando el objectDataSource detecta que el parámetro es un tipo complejo, establece la propiedad DataObjectTypeName con el nombre del tipo del parámetro el cual utiliza para crear una instancia de la clase cuando es invocado el método.



image



3. Seguidamente le asociamos el ObjectDataSource al GridView.



image



4. El siguiente paso es crear el botón de comando para tener la opción de editar.



image



Con esto finalizamos el proceso de edición utilizando el ObjectDataSource, el gridView y el EntityFramework.



image



Sin duda la ventaja principal con este esquema, es que podemos seguir utilizando nuestra lógica de negocios utilizando aplicaciones Web y através del ObjectDataSource no vamos a tener la necesidad de escribir código ni para seleccionar ni para actualizar datos.



Technorati Tags: ,,

3 comentarios:

lucas dijo...
Este comentario ha sido eliminado por el autor.
lucas dijo...

Saludos Luis, he estado tratando de seguir todo el ejemplo de Entity Framework, y tope con el siguiente problema, no se de donde sale el objeto “SeguridadEntities”

Public Shared Contexto As SeguridadEntities

--------------------------------
Ah por cierto ya logre pasar la exprecion lambda de C# a vb

C#
ModeloEntidades.Usuario.Where(u => u.Id == id).FirstOrDefault( )

VB
ModeloEntidades.Usuario.Where(Function(u) u.Id = id).FirstOrDefault()



Gracias

Luis D. Rojas dijo...

Hola Lucas,
es la instancia del contexto del entity framework. Si vas al archivo del modelo, y le das ver mas en el toolbar de la solución, ahi puedes expandir y ver el modelo generado con su codigo C# o VB.NET. ahi buscas en la region contexto y es la instancia de esa clase generada por el EF.

Saludos