You are on page 1of 11

Mantenimiento a BD Usando Entity Framework y Linq

lunes, 25 de junio de 2012


Siempre que desarrollamos aplicaciones que usan bases de datos nos vemos en la necesidad de a re ar, editar, eliminar o bus!ar re istros pues bien ahora veremos como hacer todas estas operaciones usando entity "ramework y linq. #ara este ejem$lo desarrolle una a$li!a!i%n en 2 !a$as y utili&o una base de datos llamada Database que tiene una tabla llamada #ersonas' El ejem$lo esta desarrollado !on (isual estudio 2010 en !) y (b'net

Lo primero que aremos es crear el modelo !on!e$tual 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.

Ahora que ya tenemos nuestro modelo entity de nuestra tabla creado empezaremos a programar todas las operaciones agregamos una clase llamada Datos'!s o Datos'(b. Para cada operacin crearemos un m*todo comenzaremos con el m*todo que recupera todos los re istros de nuestra tabla. ? 1 ! { " # $ % & ' # 1 (
public static List<Personas> CargarDatos() using (DatabaseEntities bd = new DatabaseEntities()) { var datos = (from p in bd Personas select p) !oList()" return datos"

Lo que hacemos es crear un m*todo que retornara una lista de tipo $ersonas 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 sele!t a toda la tabla. Ahora creamos el m*todo que nos servir* para bus!ar re istros por medio del nombre. ? 1 public static List<Personas> $uscar(string nombre)
{

! " # $ % & ' # 1 ( 1 1 1

using (DatabaseEntities bd = new DatabaseEntities()) { var buscar = (from p in bd Personas w%ere p &ombre 'tarts(it%(nombre) select p) !oList()" return buscar"

+omo 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 w+ere para -iltrar los registros por medio del nombre tambi)n hacemos uso de ,tarts-it+ que es algo similar al like de sql para que por e.emplo 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 a re ar re istros. ? 1public static void )gregar(string nombre* string apellido* int

edad*string profesion) { ! using (DatabaseEntities bd = new DatabaseEntities()) { " bd Personas )dd+b,ect(new Personas { &ombre = nombre* # )pellido = apellido* Edad = edad* Profesion = profesion #)" $ bd 'aveC%anges()" % # & #

? Public '%ared 'ub )gregar($-.al nombre )s 'tring* $-.al apellido )s 1'tring* $-.al edad )s /nteger* $-.al profesion )s 'tring)
bd Personas )dd+b,ect(&ew Personas() (it% { &ombre = nombre* ! )pellido = apellido* Edad = edad* Profesion = profesion#) " bd 'aveC%anges() # End 0sing $ End 'ub 0sing bd )s &ew DatabaseEntities()

Lo que hacemos aqu/ es crear un m*todo que recibir* los $ar.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 /dd0bje!t para agregar un un nuevo ob.eto0registro1 de tipo persona y guardamos los datos en nuestra bd con el m)todo ,a(e1+an es. Ahora creamos el m*todo para editar los registros. ? 1 public static void Editar(int id*string nombre* string apellido* int ! " # $ % & ' 1 ( 1 1
edad* string profesion) { using (DatabaseEntities bd = new DatabaseEntities()) { var editar = (from p in bd Personas w%ere p /d == id select p) 'ingle()" editar &ombre = nombre" editar )pellido = apellido" editar Edad = edad" editar Profesion = profesion" bd 'aveC%anges()" # #

1 1 ! 1 " 1 # Al igual que el anterior creamos un m*todo que recibir* los $ar.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. ? 1 ! public static void Eliminar(int id) " { using (DatabaseEntities bd = new DatabaseEntities()) # { $ var eliminar = (from p in bd Personas % w%ere p /d==id & select p) 'ingle()" ' 1 bd Delete+b,ect(eliminar)" bd 'aveC%anges()" ( # 1 # 1 1

+reamos un m*todo que recibir* un $ar.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 Delete0bje!t. Por ultimo crearemos un m*todo que nos servir* para !ar ar en nuestro -ormulario de edicin los datos del registro que queremos editar. ? 1 public static Personas +btener/d(int id)
{

! " # $ % & ' 1

Personas persona = new Personas()" using (DatabaseEntities bd = new DatabaseEntities()) { var regis = (from p in bd Personas w%ere p /d==id select p) 'ingle()" persona /d = regis /d" persona &ombre = regis &ombre" persona )pellido = regis )pellido"

( 1 1 1 1 ! 1 " 1 # 1 $ 1 %
persona Edad = regis Edad" return persona"

# #

Lo que hacemos es crear un m*todo de tipo $ersonas 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 !lase datos' Ahora pasemos a dise2ar nuestros -ormularios para este caso ser*n 2 el $rin!i$al que sera donde se mostraran los datos en un data rid ademas se podr* hacer la b3squeda de registros y tendr* 2 botones que ser*n para agregar editar y eliminar un registro.

3ambi)n creamos los -ormulario que nos servir*n para a re ar y editar los registros.

Ahora empezaremos a programar en nuestros -ormularios empecemos con el "orm1 o -ormulario principal, comenzaremos con el cdigo que nos servir* para !ar ar los datos y hacer la b3squeda. ? 1 public void cargar()
{ # private void 3orm24Load(ob,ect sender* Event)rgs e) { cargar()" # private void btnbuscar4Clic5(ob,ect sender* Event)rgs e) { data1rid.iew2 Data'ource = Datos $uscar(t6tnombre !e6t)" #

! " # $ % & ' 1 ( 1 1 1 1

data1rid.iew2 Data'ource = Datos CargarDatos()"

! 1 " ? 1

! " # Private 'ub 3orm24Load($-.al sender )s '-stem +b,ect* $-.al e )s $ '-stem Event)rgs) 7andles 8-$ase Load cargar() % End 'ub & ' Private 'ub btnbuscar4Clic5($-.al sender )s '-stem +b,ect* $-.al e )s 1 '-stem Event)rgs) 7andles btnbuscar Clic5 ( data1rid.iew2 Data'ource = Datos $uscar(t6tnombre !e6t) End 'ub 1 1 4l cdigo es sencillo y -*cil de entender as/ que no entrare en mayor e5plicacin primero creamos un m*todo donde se cargan los datos y luego en el e(ento load cargamos los datos y luego en el e(ento del bot%n buscar llamamos el m*todo buscar y le enviamos el par*metro para obtener los datos. Ahora veamos como a re ar un nuevo registro. ? 1 ! " # $ % & ' 1 ( 1 1 1 1 !
99cargar datos al cerrar form agregarregistro - actuali:ar private void ob,43ormClosed(ob,ect sender* 3ormClosedEvent)rgs e) { cargar()" # private void btnagregar4Clic5(ob,ect sender* Event)rgs e) { 3orm; ob, = new 3orm;()" 99abrir el otro formulario - actuali:ar datagrid al cerrarlo ob, 3ormClosed <= new '-stem (indows 3orms 3ormClosedEvent7andler(ob,43ormClosed)" ob, '%ow()" #

Public 'ub cargar() data1rid.iew2 Data'ource = Datos CargarDatos() End 'ub

? 1 =cargar datos al cerrar form agregarregistro - actuali:ar ! " #

Private 'ub ob,43ormClosed($-.al sender )s +b,ect* $-.al e )s 3ormClosedEvent)rgs) cargar() End 'ub

$ Private 'ub btnagregar4Clic5($-.al sender )s '-stem +b,ect* $-.al e % )s '-stem Event)rgs) 7andles btnagregar Clic5 & Dim ob, )s &ew 3orm;() =abrir el otro formulario - actuali:ar datagrid al cerrarlo ' )dd7andler ob, 3ormClosed* &ew 1 '-stem (indows 3orms 3ormClosedEvent7andler()ddress+f ob,43ormClosed) ( ob, '%ow() 1 End 'ub 1 6emos que primero creamos un m*todo que nos servir* para detectar el cierre tanto del -ormulario para agregar registro como el de editar esto lo hacemos para actualizar los datos siempre que hagamos cambios desde los -ormularios, luego en el e(ento del bot%n llamamos al "orm2 que es donde agregamos un nuevo registro. Ahora veamos como editamos y eliminamos un registro. ? 1 private void btneditar4Clic5(ob,ect sender* Event)rgs e)
{

! int id = Convert !o/nt?;(row Cells@AB .alue)" " # 3orm? ob, = new 3orm?(id)" ob, 3ormClosed <= new $ '-stem (indows 3orms 3ormClosedEvent7andler(ob,43ormClosed)" % ob, '%ow()" & ' # 1 ( private void btneliminar4Clic5(ob,ect sender* Event)rgs e) 1 { Dialog>esult resul = 8essage$o6 '%ow(C'eguro Due Duiere 1 eliminar el >egistroEC* CEliminar >egistroC* 1 1 ! 1 " 1 # 1 $ 1 % 1 & 1 ' ( 1

Data1rid.iew>ow row = data1rid.iew2 Current>ow"

8essage$o6$uttons Fes&o)" if (resul == Dialog>esult Fes) { Data1rid.iew>ow row = data1rid.iew2 Current>ow" int idpersona = Convert !o/nt?;(row Cells@AB .alue)" Datos Eliminar(idpersona)" 8essage$o6 '%ow(C'e Elimino el >egistro Con &umero /DG C < idpersona* CEliminar >egistroC)" cargar()" # #

! ? 1 ! " Private 'ub btneditar4Clic5($-.al sender )s '-stem +b,ect* $-.al e )s # '-stem Event)rgs) 7andles btneditar Clic5 $ Dim row )s Data1rid.iew>ow = data1rid.iew2 Current>ow Dim id )s /nteger = Convert !o/nt?;(row Cells(A) .alue) % & Dim ob, )s &ew 3orm?(id) ' )dd7andler ob, 3ormClosed* &ew 1 '-stem (indows 3orms 3ormClosedEvent7andler()ddress+f ob,43ormClosed) ( ob, '%ow() 1 End 'ub 1 Private 'ub btneliminar4Clic5($-.al sender )s '-stem +b,ect* $-.al e 1 1 ! 1 " 1 # 1 $ 1 % 1 & 1 '
)s '-stem Event)rgs) 7andles btneliminar Clic5 Dim resul )s Dialog>esult = 8essage$o6 '%ow(C'eguro Due Duiere eliminar el >egistroEC* CEliminar >egistroC* 8essage$o6$uttons Fes&o) /f resul = Dialog>esult Fes !%en Dim row )s Data1rid.iew>ow = data1rid.iew2 Current>ow Dim idpersona )s /nteger = Convert !o/nt?;(row Cells(A) .alue) Datos Eliminar(idpersona) 8essage$o6 '%ow(C'e Elimino el >egistro Con &umero /DG C H idpersona* CEliminar >egistroC) cargar() End /f End 'ub

4n el e(ento !li!k de bot%n editar igual que el anterior abrimos el "orm2 que es el que nos servir* para editar los registros y actualizamos los datos al cerrarlo, algo importante es que al "orm2 le enviamos el id del registro a editar. 7 en el e(ento 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. /+ora $asamos al !%di o del "orm2 que es en el que a re amos los re istros' ? private void btnaceptar4Clic5(ob,ect sender* Event)rgs e) 1
{

! /nt?;(t6tedad !e6t)*cbbprofesion 'elected/tem !o'tring())" " 8essage$o6 '%ow(C>egistro )gregado C*C)gregar >egistroC)" t%is Close()" #

Data)cces Datos )gregar(t6tnombre !e6t*t6tapellido !e6t*Convert !o

$ # % ?
Private 'ub btnaceptar4Clic5($-.al sender )s '-stem +b,ect* $-.al e )s Data)cces Datos )gregar(t6tnombre !e6t* t6tapellido !e6t*

1'-stem Event)rgs) 7andles btnaceptar Clic5

!Convert !o/nt?;(t6tedad !e6t)* cbbprofesion 'elected/tem !o'tring()) 8essage$o6 '%ow(C>egistro )gregado C* C)gregar >egistroC) " 8e Close() # End 'ub Aqu/ lo ,nico que hacemos es llamar al metodo a re ar y le enviamos los datos necesarios para agregar un registro. 4 $or ultimo en nuestro "orm2 tendremos el si uiente !odi o' ? 1 private int id" ! " # $ % & ' 1 ( 1 1 1
public 3orm?(int idempleado) { /nitiali:eComponent()" id = idempleado" #

private void 3orm?4Load(ob,ect sender* Event)rgs e) { 99 se carga el registro Due se Duiere editar cbbprofesion 'elected/nde6 = A" Personas persona = Datos +btener/d(id)" id = persona /d" t6tnombre !e6t = persona &ombre" t6tapellido !e6t = persona )pellido" t6tedad !e6t = persona Edad !o'tring()" #

private void btnaceptar4Clic5(ob,ect sender* Event)rgs e) 1 { ! Datos Editar(id*t6tnombre !e6t*t6tapellido !e6t*Convert !o/ 1 nt?;(t6tedad !e6t)*cbbprofesion 'elected/tem !o'tring())" " 8essage$o6 '%ow(C>egistro )ctuali:ado C* C)ctuali:ar 1 >egistroC)" t%is Close()" # # 1 $ 1 % 1 & 1 '

( 1

! " Aqui lo que hacemos es primeramente obtener los datos del registro a editar en el e(ento load eso lo hacemos con el metodo 0btener5d y le enviamos como parametro el dato recibido del -ormulario principal. 7 en el e(ento del boton llamamos a nuestro metodo 4ditar y le enviamos los parametros para editar el registro. Bueno eso es todo $or a+ora, !omo $odemos notar usar entity "ramework y linq nos "a!ilita el trabajo $ara trabajar !on bases de datos'