Sin duda una de las tecnologías que como desarrollador han mejorado mi productividad son los ORM. Hoy vengo a hablaros de Vici.CoolStorage un ORM cross platform para MonoTouch, MonoDroid y WP7 (y seguramente W8). Podéis descargarlo desde la página del proyecto.
Voy a ilustrar un ejemplo con MonoTouch en el que tendremos una clase persona:
[MapTo("Persona")] public class Persona : CSObject<Persona,int>{ public int Id { get; set; } public string Nombre { get; set; } public string Apellidos { get; set; } }
Este código sería válido para MonoDroid y WindowsPhone pero, puesto que en el caso de MonoTouch no se soporta Reflection.Emmit, y CoolStorage la utiliza para su funcionamiento, debemos añadir el siguiente código en los getters/Setters:
[MapTo("Persona")] public class Persona : CSObject<Persona,int>{ public int Id { get { return (int)GetField("Id"); } } public string Nombre { get { return (string)GetField("Nombre"); } set { SetField("Nombre",value); } } public string Apellidos { get { return (string)GetField("Apellidos"); } set { SetField("Apellidos",value); } } }
Una vez hemos definido la clase, debemos conectarnos a la base de datos y, sólo en caso de que no exista previamente, crearla. Para ello hemos preparado el siguiente método:
void ComprobarYCrearLaDB{ string dbNombre = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.Personal), "db"); CSConfig.SetDB (dbNombre,SqliteOption.CreateIfNotExists, () => { CSDatabase.ExecuteNonQuery ( "CREATE TABLE Persona (Id INTEGER PRIMARY KEY AUTOINCREMENT," + "Nombre text, Apellidos text)"); //Datos de ejemplo Persona p = new Persona(){ Nombre="Jose", Apellidos="Gónzalez"} ; p.Save(); p = new Persona(){ Nombre="Antonio", Apellidos="Gónzalez"} ; p.Save(); } ); }
Con CSConfig.SetDb indicamos que se cree la base de datos, y el método que se ejecutará cuando se cree. En nuestro ejemplo creamos la tabla Persona en la base de datos, para a continuación crear unos datos de prueba que guardamos gracias al método Save.
Finalmente, creamos la interfaz de usuario en el punto de entrada de la aplicación:
public override bool FinishedLaunching (UIApplication app, NSDictionary options) { window = new UIWindow (UIScreen.MainScreen.Bounds); ComprobarYCrearLaDB(); //Se crea la interfaz de usuario var root = new RootElement("Personas"); var section = new Section("Personas"); foreach (var p in Persona.List()) { section.Add(new StringElement(string.Format("{0} {1}",p.Nombre,p.Apellidos))); } root.Add(section); var dialog = new DialogViewController(UITableViewStyle.Plain,root); dialog.Root=root; window.RootViewController = dialog; window.MakeKeyAndVisible (); return true; }
Como veis es muy fácil comenzar con este ligero ORM. Además aunque no lo hemos visto, soporta transacciones y relaciones. Aquí encontrareis el fichero de código completo.
Deja un comentario