Está en la página 1de 15

1

Docente: Ing. Carlos Cruzado Puente de la Vega



Crear clases de modelo con Entity Framework

Aprender a usar ASP.NET MVC con Microsoft Entity Framework. Aprender a utiliar al Asistente de la
entidad para crear un A!".NET Entity !ata Model. A lo lar#o de este tutorial$ construimos una aplicaci%n
we& 'ue muestra c%mo seleccionar$ insertar$ actualiar y eliminar datos de la &ase de datos mediante Entity
Framework.

El o&(eti)o de este tutorial es e*plicar c%mo se pueden crear clases de acceso a datos usando Microsoft
Entity Framework al crear una aplicaci%n ASP.NET MVC. Este tutorial no asume conocimientos pre)ios de
Microsoft Entity Framework. Al final de este tutorial$ comprender c%mo usar Entity Framework para
seleccionar$ insertar$ actualiar y eliminar re#istros de la &ase de datos.
Microsoft Entity Framework es una +erramienta de mapeo relacional de o&(etos ,"-.M/ 'ue permite
#enerar una capa de acceso a datos de una &ase de datos automticamente. Entity Framework le permite
e)itar la tediosa tarea de construir sus clases de acceso a datos a mano.

No +ay nin#una cone*i%n esencial entre ASP.NET MVC y Microsoft Entity Framework. E*isten )arias
alternati)as para Entity Framework 'ue puede utiliar con ASP.NET MVC. Por e(emplo$ puede crear clases
modelo MVC usando otras +erramientas "-.M como Microsoft 01N2 to S20$ N3i&ernate o su&s%nico.

Para ilustrar c%mo se puede utiliar Microsoft Entity Framework con ASP.NET MVC$ a construir una
aplicaci%n de e(emplo simple. Vamos a crear una aplicaci%n de pel4cula de &ase de datos 'ue le permite
mostrar y editar re#istros de &ase de datos de la pel4cula.
Este tutorial asume 'ue tiene Visual Studio 5667 o Visual 8e& !e)eloper 5667 con Ser)ice Pack 9. Necesita
Ser)ice Pack 9 para poder utiliar Entity Framework. Puede descar#ar Visual Studio 5667 Ser)ice Pack 9 o
Visual 8e& !e)eloper con Ser)ice Pack 9 desde la si#uiente direcci%n:

+ttp:--www.ASP.net-downloads-

Crear la &ase de datos de muestra de pel4cula
0a aplicaci%n de &ase de datos de pel4cula utilia una ta&la de &ase de datos denominada pel4culas 'ue
contiene las si#uientes columnas:
Nombre de la columna Tipo de datos Permitir valores nulos? Es la clave principal?
1! int Falso True
T4tulo n)arc+ar,966/ Falso Falso
!irector n)arc+ar,966/ Falso Falso
Esta ta&la puede a#re#ar a un proyecto de ASP.NET MVC si#uiendo estos pasos:
2
Docente: Ing. Carlos Cruzado Puente de la Vega

9.

3a#a clic en la carpeta App;!ata en la )entana E*plorador de soluciones y seleccione la opci%n de
men< Agregar, nuevo elemento de.
5.

!esde el cuadro de dilo#o Agregar nuevo elemento $ seleccione Base de datos de SQL Server$
dar la &ase de datos el nom&re Mo)ies!=.mdf y +a#a clic en el &ot%n Agregar .
>.

3a#a do&le clic en el arc+i)o Mo)ies!=.mdf para a&rir la )entana de E*plorador E*plorer-&ase de
datos del ser)idor.
?.

E*panda la cone*i%n de &ase de datos de Mo)ies!=.mdf$ +a#a clic en la carpeta ta&las y seleccione
la opci%n Agregar nueva tabla.
@.

En el diseAador de ta&las$ a#re#ar las columnas 1d$ t4tulo y !irector.
B.

3a#a clic en el &ot%n uardar ,tiene el icono del dis'uete/ para #uardar la nue)a ta&la con las
pel4culas de nom&re.
!espuCs de crear la ta&la de &ase de datos de pel4culas$ de&e a#re#ar al#unos datos de muestra en la
ta&la. 3a#a clic en la ta&la pel4culas y seleccione la opci%n de men< !ostrar tabla de datos. Puede
introducir datos falsos de la pel4cula en la cuadr4cula 'ue aparece.

Crear el A!".NET Entity !ata Model
Para poder usar Entity Framework$ de&e crear un modelo de datos de la entidad. Puede apro)ec+ar del
Asistente de Entity Data Model de Visual Studio para #enerar un modelo de datos de entidad de una &ase
de datos automticamente.
Si#a estos pasos:
9.

3a#a clic en la carpeta de modelos en la )entana E*plorador de soluciones y seleccione la opci%n de
men< Agregar, nuevo elemento.
5.

En el cuadro de dilo#o Agregar nuevo elemento $ seleccione la cate#or4a de datos ,)er fi#ura 9/.
>.

Seleccione la plantilla de A"#.NET Entit$ "ata !odel $ el modelo de datos de la entidad de dar el
nom&re Mo)ies!=Model.edm* y +a#a clic en el &ot%n Agregar . Al +acer clic en el &ot%n Agregar $
se inicia al Asistente de modelo de datos.
?.

En el paso de Elegir modelo de contenido $ seleccione la opci%n generar desde una base de datos
y +a#a clic en el siguiente &ot%n ,)er fi#ura 5/.
@.

En el paso de Elegir la cone%i&n de datos $ seleccione la cone*i%n de &ase de datos de
Mo)ies!=.mdf$ escri&a el nom&re de confi#uraci%n de cone*i%n de entidades Mo)ies!=Entities y
+a#a clic en el siguiente &ot%n ,)er fi#ura >/.
B.

En el Eli'a los ob'etos de base de datos paso$ seleccione la ta&la de &ase de datos de la pel4cula y
+a#a clic en el acabado de &ot%n ,)er fi#ura ?/.
!espuCs de completar estos pasos$ a&re el A!".NET Entity !ata Model !esi#ner ,Entity !esi#ner/.

(igura ) * creando un nuevo modelo de datos de entidad
3
Docente: Ing. Carlos Cruzado Puente de la Vega


(igura + * Eli'a paso de contenido del modelo

(igura , * Eli'a su cone%i&n de datos
4
Docente: Ing. Carlos Cruzado Puente de la Vega


(igura - * Eli'a los ob'etos de base de datos


Modificar el A!".NET Entity !ata Model
!espuCs de crear un modelo de datos de la entidad$ puede modificar el modelo$ apro)ec+ando el
diseAador de la entidad ,)er fi#ura @/. Puede a&rir el diseAador de la entidad en cual'uier momento
+aciendo do&le clic en el arc+i)o Mo)ies!=Model.edm* en la carpeta de modelos dentro de la )entana
E*plorador de soluciones.
(igura . * el A"#.NET Entit$ "ata !odel "esigner
5
Docente: Ing. Carlos Cruzado Puente de la Vega


Por e(emplo$ puede utiliar el diseAador de la entidad para cam&iar los nom&res de las clases 'ue #enera
el Asistente de datos del modelo de entidad. El asistente crea una nue)a clase de acceso de datos
denominada pel4culas. En otras pala&ras$ el asistente le dio a la clase el mismo nom&re 'ue la ta&la de &ase
de datos. Por'ue )amos a utiliar esta clase para representar una instancia particular de la pel4cula$ nosotros
de&emos cam&iar la clase de pel4culas para cine.
Si desea cam&iar el nom&re de una clase de entidad$ puede +acer do&le clic en el nom&re de clase en el
diseAador de la entidad y escri&a un nue)o nom&re ,)er fi#ura B/. Alternati)amente$ puede cam&iar el
nom&re de una entidad en la )entana de propiedades despuCs de seleccionar una entidad en el diseAador
de la entidad.
(igura / * cambiar un nombre de entidad
6
Docente: Ing. Carlos Cruzado Puente de la Vega


.ecuerde #uardar el modelo de datos de la entidad despuCs de +acer una modificaci%n$ +a#a clic en el
&ot%n Duardar ,el icono del dis'uete/. !etrs de las escenas$ el diseAador de la entidad #enera un con(unto
de clases de Visual =asic. net. Puede )er estas clases a&riendo el arc+i)o Mo)ies!=Model.!esi#ner.)& desde
la )entana del e*plorador de soluciones.
No modifi'ue el c%di#o en el arc+i)o !esi#ner.)& ya se so&rescri&ir los cam&ios la pr%*ima )e 'ue utilice
el diseAador de la entidad. Si desea ampliar la funcionalidad de las clases de entidad definida en el arc+i)o
!esi#ner.)& puede crear clases parciales en arc+i)os separados.
Seleccionar re#istros de &ase de datos con Entity Framework
Vamos a empear a construir nuestra aplicaci%n de pel4cula de &ase de datos mediante la creaci%n de una
p#ina 'ue muestra una lista de re#istros de la pel4cula. El controlador de la casa de 0istado 9 e*pone una
acci%n denominada 1nde*,/. 0a acci%n de 1nde*,/ de)uel)e todos los re#istros de la pel4cula de la ta&la de
&ase de datos de la pel4cula$ apro)ec+ando el marco de la entidad.


Listado ) * 0ontrollers12ome0ontroller.vb
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mc.Controller
7
Docente: Ing. Carlos Cruzado Puente de la Vega


Priate _db !s Moies"#Entities

Public Sub $e%()
_db & $e% Moies"#Entities()
End Sub

Public 'unction Inde(()
)ie%"ata.Model & _db.MoieSet.*o+ist()
,eturn )ie%()
End 'unction

End Class
"&ser)e 'ue el controlador en el listado 9 incluye un constructor. El constructor inicialia un campo de
ni)el de clase denominado ;d&. El campo de ;d& representa a las entidades de &ase de datos #eneradas
por Microsoft Entity Framework. El campo ;d& es una instancia de la clase de Mo)ies!=Entities 'ue fue
#enerada por el diseAador de la entidad.
El campo ;d& se utilia dentro de la acci%n de 1nde*,/ para recuperar los re#istros de la ta&la de &ase de
datos de pel4culas. 0a ;d& de e*presi%n.Mo)ieSet representa todos los re#istros de la ta&la de &ase de
datos de pel4culas. El mCtodo To0ist,/ se utilia para con)ertir el con(unto de pel4culas en una colecci%n
#enCrica de o&(etos de la pel4cula: lista ,de pel4cula/.
0os re#istros de la pel4cula se recuperan con la ayuda de 01N2 to Entities. 0a acci%n 1nde*,/ en 0istado 9
utilia 01N2 Sintaxis de mtodo para recuperar el con(unto de re#istros de &ase de datos. Si lo prefiere$
puede utiliar la sintaxis de consulta 01N2 en su lu#ar. 0os si#uientes dos comandos +acen lo mismo:
)ie%"ata.Model & _db.MoieSet.*o+ist()
)ie%"ata.Model & (-rom m in _db.MoieSet select m).*o+ist()
Etilice cual'uier sinta*is 01N2 F sinta*is de mCtodo o consulta F 'ue encuentres ms intuiti)a. No e*iste
diferencia en rendimiento entre los dos enfo'ues: la <nica diferencia es el estilo.
0a )ista en el listado 5 se utilia para mostrar los re#istros de la pel4cula.
Listado de + * 3ie4s12ome15nde%.asp%
<./ Pa0e +an0ua0e&1)#1
Inherits&1System.Web.Mc.)ie%Pa0e(2- +ist(2- Mc!33lication4.Moie))1 .>
<5"2C*6PE html P7#+IC 1899W:C99"*" ;H*M+ 4.< *ransitional99E$1
1htt3=99%%%.%:.or09*,9(html49"*"9(html48transitional.dtd1>
<html (mlns&1htt3=99%%%.%:.or094>>>9(html1 >
<head runat&1serer1>
<title>Inde(<9title>
8
Docente: Ing. Carlos Cruzado Puente de la Vega

<9head>
<body>
<di>

<. 'or Each m In Model.>

*itle= <.& m.*itle .>
<br 9>
"irector= <.& m."irector .>
<br 9>
<.&Html.!ction+in?(1Edit1@ 1Edit1@ $e% With A.id & m.IdB).>
<.&Html.!ction+in?(1"elete1@ 1"elete1@ $e% With A.id & m.IdB).>

<hr 9>
<. $e(t.>

<.& Html.!ction+in?(1!dd Moie1@ 1!dd1) .>

<9di>
<9body>
<9html>
0a )ista en el listado 5 contiene un &ucle (or Eac6 'ue recorre en cada re#istro de la pel4cula y muestra los
)alores de propiedades de t4tulo y !irector del re#istro de la pel4cula. "&ser)e 'ue se muestra un )4nculo
Editar y eliminar al lado de cada re#istro. Adems$ un )4nculo A#re#ar pel4cula aparece en la parte inferior
de la )ista ,)er fi#ura G/.

(igura 7 * la vista de 8ndice
9
Docente: Ing. Carlos Cruzado Puente de la Vega


El 4ndice es un escrito de la vista. 0a )ista de 4ndice tiene una directi)a H I J Pa#e I K 'ue incluye un
atri&uto 1n+erits. El atri&uto 1n+erits proyecta la propiedad View!ata.Model a una infle*i&le lista colecci%n
#enCrica de o&(etos de la pel4cula: una lista ,de pel4cula/.
1nsertar re#istros de &ase de datos con Entity Framework
Puede utiliar el marco de la entidad para 'ue sea fcil de insertar nue)os re#istros en una ta&la de &ase
de datos. 0istado > contiene dos nue)as acciones a#re#adas a la clase de controlador de inicio 'ue puede
utiliar para insertar nue)os re#istros en la ta&la de &ase de datos de la pel4cula.
Listado ,9 0ontrollers12ome0ontroller.vb :agregar m;todos<
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mc.Controller


Public 'unction !dd()
,eturn )ie%()
End 'unction

<!cce3t)erbs(Htt3)erbs.Post)> _
Public 'unction !dd(#y)al -orm !s 'ormCollection)
10
Docente: Ing. Carlos Cruzado Puente de la Vega

"im moie*o!dd !s $e% Moie()

C "eserialiDe (Include %hite list5)
*ry73dateModel(moie*o!dd@ $e% Strin0() A1*itle1@ 1"irector1B@
-orm.*o)alueProider())

C )alidate
I- Strin0.Is$ull2rEm3ty(moie*o!dd.*itle) *hen
ModelState.!ddModelError(1*itle1@ 1*itle is reEuired51)
End I-
I- Strin0.Is$ull2rEm3ty(moie*o!dd."irector) *hen
ModelState.!ddModelError(1"irector1@ 1"irector is reEuired51)
End I-

C I- alid@ sae moie to database
I- (ModelState.Is)alid) *hen
_db.!dd*oMoieSet(moie*o!dd)
_db.SaeChan0es()
,eturn ,edirect*o!ction(1Inde(1)
End I-

C 2ther%ise@ resho% -orm
,eturn )ie%(moie*o!dd)
End 'unction


End Class
0a primera acci%n Add,/ simplemente de)uel)e una )ista. 0a )ista contiene un formulario para a#re#ar una
nue)a &ase de datos de pel4cula #ra&ar ,)er fi#ura 7/. Cuando usted en)4a el formulario$ se in)oca la
se#unda acci%n Add,/.
"&ser)e 'ue la se#unda acci%n Add,/ est decorada con el atri&uto AcceptVer&s. Esta acci%n puede ser
in)ocada s%lo cuando realice una operaci%n P"ST de 3TTP. En otras pala&ras$ esta acci%n s%lo se puede
in)ocar al re#istrar un formulario 3TM0.
0a se#unda acci%n Add,/ crea una nue)a instancia de la clase de pel4cula de marco de entidad con la ayuda
del mCtodo ASP.NET MVC TryEpdateModel,/. El mCtodo TryEpdateModel,/ toma los campos en el
FormCollection pasada al mCtodo Add,/ y asi#na los )alores de estos campos de formulario 3TM0 a la
clase de pel4cula.
11
Docente: Ing. Carlos Cruzado Puente de la Vega

Al usar Entity Framework$ de&e proporcionar una Llista &lancaL de propiedades cuando utilice los mCtodos
TryEpdateModel o EpdateModel para actualiar las propiedades de una clase de entidad.
A continuaci%n$ la acci%n de Add,/ realia al#unos )alidaci%n de forma simple. 0a acci%n se )erifica 'ue el
t4tulo y el !irector de propiedades tienen )alores. Si +ay un error de )alidaci%n$ un mensa(e de error de
)alidaci%n se a#re#a a ModelState.
Si no +ay errores de )alidaci%n se a#re#a un nue)o re#istro de pel4cula a la ta&la de &ase de datos de
pel4culas con la ayuda de Entity Framework. El nue)o re#istro se a#re#a a la &ase de datos con las dos
si#uientes l4neas de c%di#o:
_db.!dd*oMoieSet(moie*o!dd)
_db.SaeChan0es()
0a primera l4nea de c%di#o a#re#a la nue)a entidad de pel4cula al con(unto de pel4culas 'ue realia un
se#uimiento Entity Framework. 0a se#unda l4nea de c%di#o #uarda los cam&ios realiados en las pel4culas
'ue se est realiando un se#uimiento a la &ase de datos su&yacente.
(igura = * la vista Add

Actualiaci%n de re#istros de &ase de datos con Entity Framework
Puede se#uir casi el mismo enfo'ue para editar un re#istro de &ase de datos con Entity Framework como
el enfo'ue 'ue +emos se#uido s%lo para insertar un nue)o re#istro de &ase de datos. 0istado ? contiene
12
Docente: Ing. Carlos Cruzado Puente de la Vega

dos nue)as acciones de control con el nom&re Edit,/. 0a primera acci%n de Edit,/ de)uel)e un formulario
3TM0 para editar un re#istro de la pel4cula. 0a se#unda acci%n Edit,/ intenta actualiar la &ase de datos.
Listado de - * 0ontrollers12ome0ontroller.vb :m;todos de edici&n<
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mc.Controller


Public 'unction Edit(#y)al id !s Inte0er)
C Fet moie to u3date
"im moie*o73date !s Moie & _db.MoieSet.'irst('unction(m) m.Id & id)
)ie%"ata.Model & moie*o73date
,eturn )ie%()
End 'unction

<!cce3t)erbs(Htt3)erbs.Post)> _
Public 'unction Edit(#y)al -orm !s 'ormCollection)

C Fet moie to u3date
"im id !s Inte0er & Inte0er.Parse(-orm(1id1))
"im moie*o73date !s Moie & _db.MoieSet.'irst('unction(m) m.Id & id)

C "eserialiDe (Include %hite list5)
*ry73dateModel(moie*o73date@ $e% Strin0() A1*itle1@ 1"irector1B@
-orm.*o)alueProider)

C )alidate
I- Strin0.Is$ull2rEm3ty(moie*o73date.*itle) *hen
ModelState.!ddModelError(1*itle1@ 1*itle is reEuired51)
End I-
I- Strin0.Is$ull2rEm3ty(moie*o73date."irector) *hen
ModelState.!ddModelError(1"irector1@ 1"irector is reEuired51)
End I-

C I- alid@ sae moie to database
I- (ModelState.Is)alid) *hen
_db.SaeChan0es()
,eturn ,edirect*o!ction(1Inde(1)
13
Docente: Ing. Carlos Cruzado Puente de la Vega

End I-

C 2ther%ise@ resho% -orm
,eturn )ie%(moie*o73date)
End 'unction


End Class
0a se#unda acci%n de Edit,/ empiea por recuperar el re#istro de la pel4cula de la &ase de datos 'ue coincide
con el 1d de la pel4cula 'ue se est editando. El si#uiente 01N2 to declaraci%n de entidades a#arra el primer
re#istro de la &ase de datos 'ue coincida con un particular 1d:
"im moie*o73date !s Moie & _db.MoieSet.'irst('unction(m) m.Id & id)
A continuaci%n$ el mCtodo TryEpdateModel,/ se utilia para asi#nar los )alores de los campos del
formulario 3TM0 a las propiedades de la entidad de la pel4cula. "&ser)e 'ue se suministra una lista &lanca
para especificar las propiedades e*actas para actualiar.
A continuaci%n$ al#unos )alidaci%n simple se realia para compro&ar 'ue el t4tulo de la pel4cula y el !irector
de propiedades tienen )alores. Si cual'uier propiedad carece de un )alor$ entonces se a#re#a un mensa(e
de error de )alidaci%n a ModelState y ModelState.1sValid de)uel)e el )alor false.
Por <ltimo$ si no +ay errores de )alidaci%n$ entonces la ta&la de &ase de datos de pel4culas se actualia con
los cam&ios llamando al mCtodo Sa)eC+an#es,/.
Al editar los re#istros de la &ase de datos$ necesita pasar el 1d del re#istro 'ue se est editando a la acci%n
del controlador 'ue realia la actualiaci%n de la &ase de datos. !e lo contrario$ la acci%n del controlador
no sa&r 'ue re#istre para actualiar la &ase de datos su&yacente. 0a )ista Editar$ fi#uran en el listado @$
incluye un campo de formulario oculto 'ue representa el 1d del re#istro de &ase de datos 'ue se est
editando.
Listado de . * 3ie4s12ome1Edit.asp%
<./ Pa0e +an0ua0e&1)#1 Inherits&1System.Web.Mc.)ie%Pa0e(2-
Mc!33lication4.Moie)1 .>
<5"2C*6PE html P7#+IC 1899W:C99"*" ;H*M+ 4.< *ransitional99E$1
1htt3=99%%%.%:.or09*,9(html49"*"9(html48transitional.dtd1>
<html (mlns&1htt3=99%%%.%:.or094>>>9(html1 >
<head id&1Head41 runat&1serer1>
<title>Edit<9title>
<style ty3e&1te(t9css1>

.in3ut8alidation8error
A
14
Docente: Ing. Carlos Cruzado Puente de la Vega

bac?0round8color=6ello%G
B

<9style>
<9head>
<body>
<di>

<h4>Edit Moie<9h4>

<-orm method&13ost1 action&19Home9Edit1>

<588 Include Hidden Id 88>
<.& Html.Hidden(1id1) .>

*itle=
<br 9>
<.& Html.*e(t#o((1title1) .>

<br 9><br 9>
"irector=
<br 9>
<.& Html.*e(t#o((1director1) .>

<br 9><br 9>
<in3ut ty3e&1submit1 alue&1Edit Moie1 9>
<9-orm>

<9di>
<9body>
<9html>
Eliminar re#istros de la &ase de datos con Entity Framework
0a operaci%n de &ase de datos final$ 'ue tenemos 'ue a&ordar en este tutorial$ es eliminar re#istros de la
&ase de datos. Puede utiliar la acci%n del controlador en el listado B para eliminar un re#istro de &ase de
datos determinada.
Listado de />>10ontrollers12ome0ontroller.vb :acci&n de eliminaci&n<
<HandleError()> _
15
Docente: Ing. Carlos Cruzado Puente de la Vega

Public Class HomeController
Inherits System.Web.Mc.Controller

Public 'unction "elete(#y)al id !s Inte0er)
C Fet moie to delete
"im moie*o"elete !s Moie & _db.MoieSet.'irst('unction(m) m.Id & id)

C "elete
_db."elete2bHect(moie*o"elete)
_db.SaeChan0es()

C Sho% Inde( ie%
,eturn ,edirect*o!ction(1Inde(1)
End 'unction

End Class
En primer lu#ar$ la acci%n de !elete,/ recupera la pel4cula entidad 'ue coincide con el 1d pasa a la acci%n.
A continuaci%n$ la pel4cula se elimina de la &ase de datos llamando al mCtodo !elete"&(ect,/ se#uido por
el mCtodo Sa)eC+an#es,/. Por <ltimo$ se rediri#e al usuario a la )ista de 4ndice.

.esumen
El prop%sito de este tutorial era demostrar c%mo crear aplicaciones de &ases de datos we& apro)ec+ando
las )enta(as de ASP.NET MVC y Microsoft Entity Framework. Aprendi% a construir una aplicaci%n 'ue
permite seleccionar$ insertar$ actualiar y eliminar re#istros de la &ase de datos.
En primer lu#ar$ +a&lamos de c%mo puede utiliar al Asistente de modelo de datos de entidad para #enerar
un modelo de datos de la entidad desde dentro de Visual Studio. Finalmente$ utiliamos el Entity
Framework para insertar$ actualiar y eliminar re#istros de la &ase de datos.

También podría gustarte