Despues de un tiempo de ausencia vuelvo aqui con estos tutoriales de MVC, esta es la tercera parte, si no has visitado las anteriores, te recomiendo que lo hagas! Parte 1. Bueno comencemos con la tercera parte, lo que veremos ahora es acceder a una base de datos, la base de datos es esta la puedes bajar de aqui, bueno comencemos!.
Models y Data Access.
Hasta el momento, lo que hemos estado haciendo es solo transmitir cadenas de direcciones URL que van a nuestro accion controlador (Action Controller) y la manda a nuestra vista. Esa es una buena manera de sentar las bases, pero ahora estamos listos para conectarnos a una base de datos. Empezaremos añadiendo un directorio App_Data que es un directorio especial en ASP.NET que ya cuenta con los permisos de seguridad necesarios para el acceso a base de datos.
Dando click derecho en el projecto y seleccionamos Add | Add ASP.NET Folder | App_Data.
Ahora agregaremos nuestra base de datos. El archivo de la base de datos se llama MvcMusicStore.mdf que es el que ya les deje arriba para que lo descarguen. Dando click derecho en la carpeta App_Data, seleccionamos Add | Existing Item… y buscamos el archivo que han descargado «MvcMusicStore.mdf».
Ahora ya agregamos la base de datos al proyecto, vamos a necesitar crear codigo para leer y escribir en la base de datos. Usaremos Entity Framework data model para manejar eso. Haga click en la carpeta Models y seleccionamos Add | New Item | Data | ADO.NET Entity Data Model. Lo nombraremos como StoreDB.edmx y presionamos Add.
Luego nos saldra un Wizard que nos ira preguntando como queremos generar nuestro modelo desde la base de datos o si creamos uno vacio. Seleccionamos «Generate from database» y le damos Next.
Ya que estamos generando nuestro modelo de una base de datos, tendremos que espeficificar que base de datos vamos a utilizar. El asistente es lo suficientemente inteligente para ver que tenemos una base de datos en nuestra carpeta App_Data, por lo que rellena la informacion de la conexion correcta para esa base de datos para nosotros.
Seleccionamos Tables y revisamos que este seleccionado «Include foreign key columns in the model». Cambiamos el nombre «Model Namespace» y le ponemos MvcMusicStore.
Enseguida nos mostrara el diagrama entidad relacion de nuestra base de datos.
Ahora que tenemos un modelo de datos reales en su lugar, podemos borrar el disco y las clases de Genero que agregamos en la carpeta Model clases con las que hemos estado trabajando, entonces borraremos Album.cs y Genre.cs de la carpeta Models.
A pesar de haber borrado las clases Album y Genres, el proyecto aun se construye y las paginas aun funcionan,
Por que?
Desde nuestra base de datos las tablas tienen campos que incluyen todas las propiedades que se estaban usando en nuestras clases Album y Genre, nuestro modelo de datos las reemplazo.
Si bien la muestra del diseñador de Entity Framework las entidades del diagrama, en realidad son solo clases de C#. Expanda el nodo StoreDB.edmx en el explorador de soluciones, y veras un archivo llamado StoreDB.Designer.cs
Para demostrar eso, vamos a cambiar el nombre de la clase de MvcMusicStoreEntities a MusicStoreEntities( hara nuestro codigo mas bonito). Haga click en el nombre de la clase (MvcMusicStoreEntities) y seleccione Refactor | Rename.
Cambie el nombre de la clase a MusicStoreEntities y presione Apply.
Consultando la base de datos.
Ahora cambiemos nuestro controlador llamado Store, empezaremos instanciando nuestra base de datos al inicio de nuestro controlador Store.
public class StoreController : Controller { MusicStoreEntities storeDB = new MusicStoreEntities();
Store Index usando LINQ Query Expression.
La clase MusicStoreEntities expone una coleccion para cada tabla en nuestra base de datos, asi que podemos consultar nuestra tabla de Genre usando LINQ ( consulta integrada de lenguaje).
Primero vamos a actualizar nuestra pagina indice (Index) de la tienda para leer todos los nombres de Genero en nuestra base de datos, y lo haremos de la siguiente manera:
// // GET: /Store/ public ActionResult Index() { // Devuelve una lista de generos de nuestra DB var genres = from genre in storeDB.Genres select genre.Name; // Establecemos el modelo var viewModel = new StoreIndexViewModel() { Genres = genres.ToList(), NumberOfGenres = genres.Count() }; // Devuelve la vista return View(viewModel); }
No es necesario hacer cambios a nuestra vista, por que esta haciendo lo mismo que estabamos haciendo antes, mostrar un listado de generos.
Store Browse, Details, e Index usando una LINQ Extension Method.
Para la busqueda de la tienda, vamos a demostrar una alternativa a la sintaxis de las expresiones LINQ que acabamos de ver- LINQ Extension Method.Estos hacen lo mismo, asi que usted puede utilizar cualquier sintaxis que mejor le paresca para una consulta determinada.
En este Action Controller, estamos en busca de un genero por su nombre. Nosotros solo esperamos un resultado, ya que no siempre debe tener dos entradas para el nombre del mismo genero, por lo que usaremos el metodo de extension unico en el genero, de esta manera:
var genre = storeDB.Genres.Single(g => g.Name == "Disco");
El metodo toma una expresion lambda como parametro, que especifica que queremos un genero unico de tal manera que su nombre coincide con el valor que hemos definido.
Vamos a aprovechar una caracteristica de Entity Framework que nos permite especificar otras entidades relacionadas que queremos cargar, asi, llama hacer un resultado de la consulta. Queremos cargar los Albums para el Genero que estan en venta, asi que consultamos desde Genres.Include(«Albums») para indicar que queremos los albums relacionados. Esto es mas eficiente, ya que tanto recuperar nuestro genero y los datos del disco en una solicitud unica.
// // GET: /Store/Browse?Genre=Disco public ActionResult Browse(string genre) { // Retrieve Genre from database var genreModel = storeDB.Genres.Include("Albums") .Single(g => g.Name == genre); var viewModel = new StoreBrowseViewModel() { Genre = genreModel, Albums = genreModel.Albums.ToList() }; return View(viewModel); }
Corriendo la aplicacion y si buscamos /Store/Browse?genre=Jazz, nos mostrata los siguientes resultados
Ahora haremos un cambio a Store Details, reemplazandolo de la siguiente manera
// // GET: /Store/Details/5 public ActionResult Details(int id) { var album = storeDB.Albums.Single(a => a.AlbumId == id); return View(album); }
Y asi terminamos la tercera parte que fue llamada «Models and Data Access».
ke tal
tu blog esta de pelos =)
oie nada ke ver con los temas peroo
io tengo ubuntu gracias a un amigo super buena onda
ke si leeiera esto kisiera ke supiera ke se akopla bn shido
bueno mi pregunta es como hago para deskargar musika si tengo ubuntu
si estaba acostumbrado a usar ares
pero ke puedo hacer ahora??
gracias por tu atencion =))
JAJAJA mugre rene, usa taringa para bajar musica
she bato payasooo
ia no jugare mas fronton kntigo
¬¬
No manches! lo que hacia falta en internet, otro blog de… bueno esto…
K original bato, neta…
No @#$@# zarro para que modera los comentarios! asi no se trollea agusto
No a los trolls! ;D
Holap, hago el codigo del browse tal como lo tienes, y me marca el siguiente error:
The method ‘Single’ is not supported by LINQ to Entities. Consider using the method ‘First’ instead
es porque tengo el visual 2008?
te agradeceria me apoyaras con eso…. un saludo.. muy buen blog
Si tienes todo tal cual esta aqui!, talvez sea por que VS 2008 no lo tienes con MVC 2, o si? no te has fijado en eso, por que no se a que se debe ese error. Podrias intentar en vez de usar una expresion lambda usar una LINQ normal como esta en index
Saludos
Gracias señor, muy interesante. En el fututro estará disponible el código fuente completo ? Saludos y gracias.
Hola y de nada :).
Tengo todo el tutorial en ingles, por si gustas puedo mandartelo!, esta muy bien explicado y por si no le entiendes tiene muchas imagenes y se da a entender!, si lo quieres te lo mando 🙂
Sí, gracias, sería interesante.
Excelente.. gracias estimado por esta ayuda… he realizado, pero no me funciona.. Es posible tener el codigo completo?
Una disculpa, como fueron mis primeros posts tal vez no los hice muy bien!, te mando este link http://www.asp.net/mvc/tutorials/mvc-music-store-part-1 aqui viene todo el tutorial pero esta en ingles, ahi mismo puedes bajar todo el codigo pero te recomiendo seguirlo hasta el final, esta muy bueno y si aprendes bastante , saludos.
Hola carnal estuvo chido este tutorial lo que kiero saber es cuando sacaras la cuarta parte por que la neta estoy aprendiendo un buen contigo soy novato y pues me quede emocionado con ver la siguiente parte si ya esta podrias mandarmela please para seguir con este chingon tutorial muchas gracias y de antemano te mando un cordial saludo XDD
Hola Juan, por falta de tiempo ya no continue con esta serie de posts, pero sabes de que simplemente yo me estaba basando en unos tutoriales existentes pero estan en ingles, te los mando para que sigas haciendolos, saludos
Enlace: http://www.asp.net/mvc/tutorials/mvc-music-store
Hola Amigo. Estaba revisando tu articulo y hay problemas para visualizar las imagenes, aver si lo puedes arreglar se ven interesantes los Tutoriales ;D
Lo siento amigo pero este post es viejo y las imagenes las use de ASP.NET, pero ahí hay tecnologías actualizadas que te recomiendo que uses (MVC 5.2)
entra a http://asp.net/mvc
Saludos