Mapeo de una Base de Datos para ASP.NET
Estaba trabajando con ASP.NET con una base de datos en mysql, puede funcionar para otros SGBD solo cambien el driver, y para ahorrar un poco de tiempo se me ocurrió buscar una manera de mapeo, pero no encontré alguna que me convenciera así que intente hacerlo por mi parte, así que les muestro mi solución y espero opinen para algunas mejorar que puedan hacerse.
primeramente una construí una clase que permite el mapeo
¿Como se usa?
Creamos primero la clase, el modelo con la que vamos a mapear, en este caso puse usuarios.
y extendemos la clase Mapper de la siguiente forma
y cuando queramos usarlo, lo podemos llamar de la siguiente forma:
Asi solo programamos una vez, usamos muchas veces :).
primeramente una construí una clase que permite el mapeo
using System; using MySql.Data.MySqlClient; using System.Collections.Generic; namespace Mapper { public abstract class MapperDataBase{ MySqlCommand comando; MySqlDataReader mysql; public MapperDataBase () { } public void StartQuery (MySqlCommand cmd) { comando = cmd; cmd.Connection.Close (); cmd.Connection.Open (); mysql = cmd.ExecuteReader (); } public bool StartQuery (string query, MySqlConnection conn) { try { comando = new MySqlCommand (query, conn); comando.Connection.Close (); comando.Connection.Open (); mysql = comando.ExecuteReader (); return true; } catch (Exception e) { Console.WriteLine(e.Message+" "+e.StackTrace); return false; } } public abstract T MapperRow (MySqlDataReader sdr, int index); public List < t > GetList () { List lista = new List (); int i = 0; while (mysql.Read()) { lista.Add (MapperRow (mysql, i++)); } comando.Connection.Close (); return lista; } public T GetObject () { if (mysql.HasRows) { mysql.Read (); return MapperRow (mysql, 0); } comando.Connection.Close (); return default(T); } } }
¿Como se usa?
Creamos primero la clase, el modelo con la que vamos a mapear, en este caso puse usuarios.
public class UserModel { [StringLength(16)] public string username { get; set; } public string pass{ get; set; } public string rol{get; set; } public string mail{get; set; } public string phone{get; set; } public int id_rol{get; set; } public bool status{get; set;} }
y extendemos la clase Mapper de la siguiente forma
public class MapperUser : Mapper.MapperDataBase{ public override UserModel MapperRow (MySqlDataReader sdr, int i) { UserModel user = new UserModel (); user.username = sdr.GetString ("username"); user.phone = sdr.GetString ("phone"); user.id_rol = sdr.GetInt32 ("id_rol"); user.mail = sdr.GetString ("mail"); user.pass = sdr.GetString ("pass"); user.status = (sdr.GetInt16 ("status") == 1); user.rol = sdr.GetString ("role"); return user; } }
y cuando queramos usarlo, lo podemos llamar de la siguiente forma:
MySqlConnection conn = new MySqlConnection (ConfigurationManager.ConnectionStrings ["MysqlConnect"].ToString ()); MapperUser mapper = new MapperUser (); mapper.StartQuery ("Select * from user", conn); mapper.GetList (); // retorna una lista con todos los usuarios
Asi solo programamos una vez, usamos muchas veces :).
Comentarios
Publicar un comentario