Está en la página 1de 19

SERVICIO DE INFORMTICA | UNIVERSIDAD DE ALICANTE

ASP.NET MVC 3 y 4
CONTACTO CON ENTITY FRAMEWORK
Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es/

LTIMA ACTUALIZACIN: 13 DE OCTUBRE DE 2012

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

2 DA CONTACTO CON ENTITY FRAMEWORK


CODE FIRST (SQL SERVER)
INTEGRAR APLICACIN DEL 1 DA
MVC est apuntando muy fuerte por el modelo de trabajo Code First. De forma muy resumida Code First nos facilita que nosotros creamos el modelo con clases y luego ya se encargar el sistema de traspasarlo a la base de datos. Todo esto lo vamos a probar desde SQL Server porque en el ODP de Oracle no se ha implementado esta funcionalidad. Posiblemente en la nueva versin (a finales de ao) ya vendr integrada. Los pasos son muy sencillos. Lo primero es crear una clase que herede de DbContext que har de nexo entre nuestra aplicacin y nuestra base de datos. Dentro de esta indicamos las tablas que se deben crear. Sern parmetros pblicos del tipo DbSet<tabla>.
public class BibliotecaContext : DbContext { public DbSet<Libro> Libros { get; set; } public DbSet<TipoLibro> TiposLibros { get; set; } }

Ahora debemos crear una conexin a SQL Server con el mismo nombre de la clase que hemos creado anteriormente. En nuestro caso BibliotecaContext.
<configuration> <connectionStrings> <add name="BibliotecaContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=CursoSI;Persist Security Info=True;User ID=CursoSI;Password=Sergio" providerName="System.Data.SqlClient" />

Si queremos tener datos cargados por defecto cada vez que carguemos nuestra aplicacin podemos acceder al global.asax y en Application_Start aadir un evento de inicializacin.
protected void Application_Start() { Database.SetInitializer(new BibliotecaContextInitializer());

En nuestro caso eliminamos completamente la base de datos y creamos un tipo de libro de tipo novela.
public class BibliotecaContextInitializer : DropCreateDatabaseAlways<BibliotecaContext> { protected override void Seed(BibliotecaContext context) { context.TiposLibros.Add(new TipoLibro { Descripcion = "Novela" }); } }

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Como os habris fijado a los nombres de las tablas les ha aadido es. Por defecto pluraliza los nombres de las tablas, y en el caso del espaol lo hace con es. Para evitar este comportamiento debemos modificar la clase DbContext e incluir
protected override void OnModelCreating(DbModelBuilder dbModelBuilder) { dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); }

Ahora si que aparecen las dos tablas con los nombres de nuestras clases.

Si ejecutamos al aplicacin, el resultado es el mismo, pero la diferencia principal es que los datos no se almacenan en memoria como se haca ayer, sino que realmente se estn almacenando en

Si solo queremos que se borre la base de datos cuando se modifica la estructura del modelo y no cada vez que se reinicie la aplicacin, accedemos al global.asax y modificamos
public class BibliotecaContextInitializer : DropCreateDatabaseIfModelChanges <BibliotecaContext>

Si por el contrario solo queremos que se inicialice si no existe la base datos (el modelo sea muy estable).
public class BibliotecaContextInitializer : CreateDatabaseIfNotExists<BibliotecaContext>

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

ENTITY FRAMEWORK
GESTIN DE TABLAS CON ENTITY FRAMEWORK
Vamos a crear un sencillo ejemplo en Oracle para ver que es y para que sirve el modelo Entity Framework (FW). Abrimos el Oracle SQL Developer y creamos dos tablas CSI_LIBRO, CSI_TIPOLIBRO

Creamos una secuencia (CSI_SEQ) para que las claves primarias de ambas tablas sean autonumricas (Clave Primaria de Secuencia). Ahora creamos un disparador para cada tabla. Botn derecho en la tabla > Disparador > Crear (Clave Primaria de Secuencia).Indicamos un nombre para el disparador, seleccionamos la secuencia y el nombre del campo al que queremos asignarlo y pulsamos aplicar.

Por ltimo creamos la relacin entre las tablas. Botn derecho > Restriccin > Agregar Clave Ajena

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Por el momento no vamos a crear ni vistas ni paquetes. Lo haremos ms adelante. Creamos un nuevo proyecto en el Visual Studio ASP.NET MVC 3 de tipo Internet Application. Lo llamamos CSI-BibliotecaBD. Sobre el proyecto botn derecho > Agragar > Nuevo elemento En las plantillas seleccionamos Datos y del listado seleccionamos ADO.NET Entity Data Model. El nombre del modelo ModeloBiblioteca.edmx

En el siguiente asistente marcamos Generar desde la base de datos

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Ahora creamos una nueva conexin con la base de datos de desarrollo. Marcamos S, incluir datos confidenciales en la cadena de conexin y guardamos la configuracin como EntitiesBiblioteca.

Por ltimos seleccionamos las tablas y le indicamos como espacio de nombres Models

Se abrir una pestaa con el esquema de las tablas. A primera vista vemos que ha identificado las claves principales de cada tabla y la relacin entre ambas.

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Bueno pues es el momento de crear los controladores para cada una de las tablas. Pulsamos F6 para compilar el proyecto y asegurarnos que el modelo EF es visible para el resto de elementos de MVC. Botn derecho en la carpeta Controllers > Agregar > Controller Le asignamos el nombre LibroController y en la plantilla/template seleccionamos Controller with read/write actions and views, using Entity Framework. Pulsamos Add y no slo nos crea los mtodos como haca la operacin de ayer, aade la lgica para su gestin y todas las vistas implicadas.

Para llamar al Index los comentarios del controlador nos indican que llamemos con /Libro/ El resultado es un entorno completo para poder gestionar libros

Es sorprendente como gestiona las relaciones entre las tablas, ya que aparece como un desplegable con los datos de los tipos de libros.

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Aqu se ve la potencia real de MVC y EF. Con un par de clics hemos creado una gestin completa de una tabla. Haramos lo mismo para la otra tabla. Al controlador lo podramos llamar TipoLibroController. Para poder gestionar ambas tablas desde el men superior (ahora mismo slo aparece Home y About). Abrimos la carpetas Views > Shared y seleccionamos el fichero _Layout.cshtml. Parece una pgina Web HTML pero incluye la nomenclatura de Razor. Nos fijamos en la zona de <ul> que se identifica como menu y aadimos dos opciones ms.
<ul id="menu"> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("Libros", "Index", "Libro")</li> <li>@Html.ActionLink("Tipo de libros", "Index", "TipoLibro")</li> <li>@Html.ActionLink("About", "About", "Home")</li> </ul>

Compilamos y visualizamos en el navegador

Podemos gestionar ambas tablas y tipo que aadamos, tipo que podemos seleccionar luego en el libro. Vamos a modificar las vistas para que los textos aparezcan en castellano, que las cabeceras identifiquen lo que gestionamos. El Index debera quedar como la pantalla siguiente.

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Implica modificar Views > Libro > Index.cshml para los elementos propios y Views > Shared > _Layout.cshtml y _LogOnPartial.cshtml para los elementos comunes. Hoy lo realizamos a mano para cada uno de los controladores. Maana ya modificaremos nuestra aplicacin para que los cambios sean comunes para todos los controladores que creemos

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

RAZOR EN DETALLE
MODELO
En la mayora de los casos la vista trabaja con los datos de un modelo. Por eso nos podemos encontrar con dos casos, que le enviemos un nico registro (por ejemplo para operaciones de creacin o edicin) o con un conjunto de datos (por ejemplo listados).

MODELO CON UN NICO REGISTRO


Por ejemplo para ver los detalles de un libro. Incluiremos @model RutaModelo al principio de la vista.
@model CSI_BibliotecaBDOracle.CSI_LIBRO

Luego para usarlo dentro del cdigo haremos referencia directamente al objeto model
@Html.DisplayFor(model => model.ISBN)

MODELO CON UN CONJUNTO DE DATOS


Por ejemplo para ver el listado de libros. Incluiremos @model IEnumerable <RutaModelo> al principio de la vista.
@model IEnumerable<CSI_BibliotecaBDOracle.CSI_LIBRO>

Luego para usarlo, por ejemplo en un bucle


@foreach (var item in Model) { .. @Html.DisplayFor(modelItem => item.ISBN) .. }

LAYOUT
Es el equivalente a las MasterPages en WebPages, es decir la plantilla comn para todas las pginas de nuestro sitio. Por defecto al crear un proyecto MVC nos crea en la carpeta Views > Shared el fichero _Layout.cshtml. Esta pgina es la plantilla que usar el asistente de las vistas cuando no seleccionamos ninguna. Se puede seleccionar cualquier otra en el momento que creamos la vista

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

10

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

o accediendo al cdigo de la vista generado y aadido la lnea Layout = Fichero con la plantilla para la vista
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }

@RENDERBODY()
Se utiliza en _layout.cshtml para indicar que en ese punto se incluir el cdigo generado por la vista. Todos los layouts deben incluirla. En caso de no hacerlo obtendremos el siguiente mensaje de error.
Error de servidor en la aplicacin '/'. No se ha llamado al mtodo "RenderBody" para la pgina de diseo "~/Views/Shared/_layout.cshtml".

@SECTION
Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

11

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Definimos una seccin de cdigo Razor / HTML que se insertar en el layout en caso de que se llame a @rendersection con el nombre de la seccin que hayamos declarado.
@section NombreSeccin { }

Si queremos definir una seccin cabecera, en cada vista la definiramos del siguiente modo.
@section cabecera { <h1>Ejemplo de seccin</h1> }

@RENDERSECTION
Incluimos en nuestra plantilla secciones o bloques de cdigo Razor / HTML que se ha definido en la vista. Podemos indicar adems si es obligatorio o no definirla.
@RenderSection("NombreSeccin ", required: false / true)

Por defecto toma el valor true, con lo que en caso de que no la incluyamos en nuestra vista, dar un mensaje de error.
Seccin no definida: "cabecera". Descripcin: Excepcin no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener ms informacin acerca del error y dnde se origin en el cdigo.
@RenderSection("cabecera", required:false)

ISSECTIONDEFINED
Por ltimo para controlar si se ha definido la seccin, disponemos de la funcin IsSectionDefined(). Siguiendo con el ejemplo de la cabecera podramos comprobar si se ha definido para darle un formato y sino le damos otro formato.
@if (IsSectionDefined("cabecera")) { <div id="title"> @RenderSection("cabecera") </div> } else { <div id="titledefalt"><h1 class="generico">Ttulo genrico</h1></div> }

ETIQUETAS AVANZADAS @()


En caso de que una variable, dentro del cdigo, pueda provocar confusin, podemos usar @(variable). Por ejemplo
<img src="images/"@model.foto.jpg" />

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

12

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

No podramos afimar si est llamando a @model.foto y luego incorpora la extensin .jpg o que interprete que .jpg es una propiedad de @model.foto. Deberamos utilizar
<img src="images/"@(model.foto).jpg" />

Para evitar este conflicto.

@:
Aunque ya lo vimos ayer, lo vuelvo a remarcar. Aquel texto HTML que no incluya etiquetas puede provocar que se interprete como cdigo Razor.
<span> @if(true){ La hora es: @DateTime.Now } else { Aqu no se debera acceder nunca } </span>

No sabe si es cdigo HTML o cdigo C#. Para definrselo anteponemos @: (si slo es una lnea) para decirle que es HTML
<span> @if(true){ @:La hora es: @DateTime.Now } else { @:Aqu no se debera acceder nunca } </span>

Es equivalente a incluir el texto entre las etiquetas <text></text>

HTML.RAW
Escribe el contenido que le pasemos sin codificar (que es lo que hace por defecto ASP.NET MVC 3). Puede que en ocasiones necesitemos que sea as (por ejemplo porque incluye etiquetas de formato), aunque debemos tener mucho cuidado con el contendido para que no nos produzcan XSS Injection.
<h2>@Html.Raw(ViewBag.Message)</h2>

PARTIAL VIEWS
Como conocemos las vistas hasta ahora genera una pgina web en cada llamada. Con un layout por defecto o personalizado, pasando por el cdigo generado por la vista y terminando con secciones opcionales o no.
Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

13

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Esto no lo hace muy complicado de mantener y sobre todo poco flexible. Por eso existen las vistas parciales que permiten dividir la pgina en bloques ms pequeos lo que las hace ms fcil de gestionar. Puede ser muy til en llamada AJAX porque el cdigo generado es el que le indiquemos en la vista parcial sin elementos como layout que se supone que se ha llamada anteriormente desde una vista. Con un ejemplo lo vamos a ver muy claro. Queremos hacer la suma de dos nmeros es un mtodo del controlador Home. Pasamos dos parmetros y cambiamos return View(); por return PartialView();
public ActionResult Suma(int numero1, int numero2) { ViewBag.Suma = numero1 + numero2; return PartialView(); }

Ahora creamos la vista y la marcamos como parcial

Escribimos el resultado en la vista vaca (que no tiene ni model, ni layout)


@ViewBag.Suma

Cmo la llamamos? Lo normal es hacerlo como hasta ahora http://servidor/home/suma?numero1=5&numero2=7

pero como es lgico el propsito no era ste. Nosotros queremos incluirlo dentro de otra vista y lo vamos a hacer con AJAX, es decir se cargar una vista inicial y ante un evento modificaremos el contenido de algn elemento de la vista inicial con el contenido de la vista parcial. Incluimos el siguiente cdigo en algn mtodo de home
La suma de 5 y 7 es: <span id="operacion"></span>

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

14

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK


<script type="text/javascript"> $(function(){ $("#operacion").load("/home/Suma?numero1=5&numero2=7"); }); </script>

La primera lnea pone un texto y prepara una etiqueta donde luego mostrar el resultado. Las siguientes lneas son javascript y JQuery. Esta librera est muy integrada en Visual Studio con lo que debemos aprovechar que la disponemos. Lo que hace es llamar a nuestro controlador con load y poner el resultado en aquella etiqueta que tenga como id operacion ($(#idetiqueta)). Visualmente vemos el resultado de la operacin, pero internamente ha hecho una segunda llamada para obtener el resultado de la suma y luego ha modificado el contenido de la etiqueta. No es obligatorio llamarlo desde javascript y con AJAX, podemos llamarlo desde nuestras propias vistas. El ejemplo de ayer que mostrbamos un listado de libros. Usamos el siguientes cdigo
Listado de libros
<ul> @foreach(var libro in (IEnumerable<MVC_3.Models.Libro>)ViewBag.Libros) { <li>@libro.Titulo (@libro.TipoLibro)</li> } </ul>

Si el formato de la ficha del libro fuera muy amplia, sera una buena solucin convertirla en una vista parcial y llamarla desde nuestra propia vista
Listado de libros (Vistas parciales) @foreach(var libroItem in (IEnumerable<MVC_3.Models.Libro>)ViewBag.Libros) { @RenderPage("~/Views/Demo/Formato.cshtml", new {libro = libroItem}); }

Para recoger los parmetros tenemos que usar el objeto Page y como propiedad lo que hayamos pasado, en este caso libro y trabaramos con las propiedades de ste como si fuera el modelo.
@{ var Model = Page.libro; } <div> <strong>Ttulo: </strong> @Model.Titulo </div> <div style="margin-bottom: 20px;"> <strong>ISBN: </strong> @Model.Isbn </div>

En este segundo caso no se hace una llamada por cada libro, ya que se hace internamente antes de devolver la pgina completa.

HELPERS (BSICO)
Los Helpers podramos entenderlo como una forma de facilitar de reutilizar cdigo que escribimos en muchas ocasiones.
Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

15

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

MVC nos ofrece de dos tipos:


HTMLHelpers orientados a escribir cdigo HTML. La mayora de mtodos que nos ofrece son para trabajar con formularios, simplificando y unificando enormemente este proceso. URLHelpers orientada a simplificar el trabajo con direcciones y conversiones de caracteres.

En el da de hoy nos centraremos en los segundos porque son muy pocos y los necesitamos para poder crear nuestro primer layout / plantilla.

URLHELPER
Para poder usar este Helper dentro del motor Razor antepondremos @Url al mtodo que queramos llamar. Por ejemplo si queremos poner la ruta de nuestro fichero css, en el layout por defecto hace uso del mtodo Content de URLHelper.
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />

La integracin es muy sencilla porque no debemos hacer ninguna referencia externa y dispone de intellisense lo que facilita su escritura. Los 4 mtodos que lo forman son Action(s:action, s:controller, ) Genera la direccin completa de la llamada a un mtodo / accin de un controlador. Por ejemplo si queremos crear un enlace a Acerca de, podramos usar el siguiente cdigo HTML
<a href="@Url.Action("About", "Home")">Acerca de</a>

Si queremos hacer una llamada a un mtodo Buscar al que le pasemos el trmino de bsqueda, incluiramos un tercer campo, con los parmetros que queramos personalizar.
<a href="@Url.Action("Buscar", "Home", new { busqueda = "Servicio de Informtica" })">Buscar por "Servicio de Informtica"</a>

Si el mtodo permite la recepcin del parmetro busqueda, entonces lo podramos usar.


public ActionResult Buscar(string busqueda) { ViewBag.Search = busqueda; return View(); }

Content(s:path) Convierte una direccin virtual / relativa en su correspondiente direccin absoluta de la aplicacin. Es muy til cuando hacemos referencia a ficheros como hojas de estilo o javascript
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

16

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

Encode(s:url) Codifica los caracteres especiales de una URL por sus equivalentes caracteres estndar. Se usa para evitar problemas con ciertos navegadores que no interpretan los caracteres especiales. En el ejemplo anterior el envo de Servicio de Informtica sera uno de los casos que nos podran dar errores por os espacios y acento.
<a href="@Url.Action("Buscar", "Home", new { busqueda = Url.Encode("Servicio de Informtica") })">Buscar por "Servicio de Informtica"</a>

La direccin que nos genera es http://servidor/Home/Buscar?busqueda=Servicio%2Bde%2BInform%25c3%25a1tica RouteUrl(s:route) Muy parecido al primero pero todo en uno, es decir pasamos los parmetros que queramos en un nico parmetro, de la siguiente manera new { Controller = , Action = , } La misma llamada Acerca de pero con RouteUrl sera.
<a href="@Url.RouteUrl(new {Controller = "Home", Action = "About"})">Acerca de</a>

Si queremos pasar tambin el campo de bsqueda (o el id)


<a href="@Url.RouteUrl(new {Controller = "Home", Action = "Buscar", busqueda = "Servicio de Informtica" })">Buscar por "Servicio de Informtica"</a>

Maana nos centraremos en los HTMLHelpers y veremos como crear los nuestros propios.

COMPRENDIENDO LAS VISTAS POR DEFECTO


Ahora que ya tenemos ms conocimientos de Razor vamos a analizar las 5 vistas que nos ha generado por defecto para las tablas CSI_LIBRO y CSI_TIPOLIBRO.

Create.cshtml Delete.cshtml Details.cshtml Edit.cshtml Index.cshtml

CONVERTIR UNA PGINA WEB A PLANTILLA


EJEMPLO DE PREGUNTAS Y RESPUESTAS (FAQS)
Vamos a usar la pgina Dynamic FAQ Section w/ jQuery, YQL &amp; Google Docs | Tutorialzine Demo (http://tutorialzine.com/2010/08/dynamic-faq-jquery-yql-google-docs/) como plantilla de trabajo para nuestro ejemplo.
Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

17

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

La diferencia est en la forma en que obtiene los datos. En esta pgina usa Google Docs para obtener el contenido. Nosotros vamos a crear una tabla con preguntas y respuestas y ser lo que mostraremos y gestionaremos. La demo la forman 3 ficheros, la pgina web, una hoja de estilo y un documento javascript. Los 3 estn en una misma carpeta raz. Para seguir el formato que sugiere ASP.NET, debera quedar: Index.html -> /Views/Shared/_layoutfaq.cshtml script.js -> /Scripts/ script.js styles.css -> /Content/ styles.css img/* -> /Content/img/*

Ahora debemos modificar _layoutfaq.cshtml para que las referencias sean correctas. Usaremos uno de los helpers que acabamos de ver Url.Content para hacer referencia a las hojas de estilo y ficheros javascript. Modificamos el mtodo Index de HomeController para que muestre algunas preguntas y respuestas. Realizarlo con secciones y con un modelo personalizado.

EJEMPLO PRCTICO
DESARROLLO COMPLETO CON EF DE UNA APLICACIN DE PREGUNTAS Y RESPUESTAS
Ahora vamos a desarrollarlo con tablas de Oracle. Para evitar conflictos a la hora de crear tablas cada alumno tendr un nmero que pospondr al nombre de la tabla. La ordenacin la haremos basndonos en el listado de alumnos que se dispone de Seleccin y Formacin. En mi caso la tabla se llama FAQ_00.

Crear la tabla e incluirla en el proyecto MVC. Crear el controlador para su gestin y modificar el mtodo Index de HomeController para que muestre los datos de la tabla.

Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

18

ASP.NET MVC 3 Y 4 | CONTACTO CON ENTITY FRAMEWORK

SELECCIN DE PROYECTO
El objetivo de este curso es que sea lo ms prctico posible. Por eso durante cada una de las sesiones se dedicar un tiempo para trabajar en un proyecto al que cada da se incorporar lo que se vea durante la sesin. Se van a presentar 3 proyectos. El desarrollo completo de un proyecto por parte de una persona es bastante complicado en 6-8 horas que se dejar para su desarrollo, por eso se formarn 3 grupos al que se le asignar a cada persona una tarea.

PRESENTACIN DE PROYECTOS
Catalogo de recursos o enlaces Agenda Universitaria Gestin de peticiones / incidencias Autocolega

Se han seleccionado stos porque son proyectos muy utilizados actualmente en la UA y est desarrollados con una programacin muy desfasada y difcil de mantener / actualizar. En todos los proyectos se analizar la posibilidad de mantener la informacin actual, respetando la estructura o creando una nueva con posibilidades de migrar los datos (2 de ellas estn desarrolladas en SQL Server y sera un buen momento para traspasarlas a Oracle). En caso de que alguien proponga un proyecto nuevo o con posibilidades de desarrollar durante el curso, se incorporar sin ningn problema.

CREACIN DE 4/8 GRUPOS


Dependiendo de las personas que asistan a clase se puede ampliar/reducir el nmero de grupos. La idea es que al menos cada grupo lo formen 2/6 personas para poder adelantar en todas las tareas, diseo, gestin y base de datos.

REPARTIR TAREAS
Las tareas se pueden corresponder con cada uno de los mdulos del MVC, es decir uno se puede encargar del modelado, otro del aspecto visual y otro de los controladores. Cada da antes de empezar a trabajar, el grupo analizar lo que van a desarrollar porque es posible que uno dependencias obligue a cambiar el orden de realizar determinadas tareas. Al final de cada clase dedicaremos 5 minutos a revisar los problemas ms generales que hayan surgido. Si la cosa se complica, por correo se me envan las sugerencias / incidencias y las analizo para la siguiente clase. El ltimo da cada grupo presentar su proyecto al resto de la clase (no ser ms de 10 minutos por proyecto). Ya explicar ms adelante los puntos a presentar.
Andrs Valls Botella | Analista | Desarrollos propios Servicio de Informtica | Universidad de Alicante Campus de Sant Vicent del Raspeig | 03690 | Espaa http://si.ua.es/es

19

También podría gustarte