Referencia de LLBLGen Pro

Esta es una referencia rápida de LLBLGen Pro a la que podrán acceder para consultar la forma de realizar tareas básicas con este framework.

La documentación la pueden bajar acá. Está disponible en varios formatos.

La clave para empezar a usar la documentación esta rápido es leer el capítulo “Tutorials and Examples -> How do I … ?”

Luego, para ahondar más en conceptos teóricos pueden leer ” Using the generated code”. Cuando habla de los dos modelos de código soportados, SelfServicing y Adapter , el que nos interesa a nosotros es el primero, ya que es el que vamos a usar.

El trabajo con LLBLGen Pro se divide en dos procesos:

  1. Generación de código: LLBLGen Pro es una aplicación de escritorio para generar código. Resumiento, este proceso es así: se crea un proyecto, se le dice con qué base de datos se va a trabajar, el programa lee la estructura de la base de datos y genera un proyecto de tipo “librería de clases” en .NET. Este paso ustedes NO lo van a necesitar hacer ni aprender, ya que la base de datos y el código lo voy a generar yo (obviamente, si les interesa aprenderlo o necesitan modificarlo, no hay problema; yo siempre subo el proyecto de LLBLGen Pro al SVN).
  2. Uso del código generado: Una vez generado el proyecto de acceso a datos y agregado a la Solución de VS en la que van a trabajar, ya pueden utilizar el código generado. El código generado contiene varias clases, pero las que más van a usar ustedes con las “EntityClasses” y las “CollectionClasses”.

El uso del código generado es muy sencillo. Les paso algunos ejemplos (también se los adjunto).

NOTA: Para diferenciar mejor cuáles son palabras que vienen del framework de LLBLGen Pro, las que creo yo son en castellano. Por ejemplo, con “PersonaEntity” se pueden dar cuenta que yo creé una tabla llamada Persona y al generar código, me creó la clase con el nombre de la tabla + el sufijo “Entity”.

Guardar un nuevo registro en la base de datos:

PersonaEntity persona = new PersonaEntity();

persona.Nombre = "Marcelo";
persona.Apellido = "Ruiz";

persona.Save();

Traer un registro de la base de datos

int idPersona = 1;
PersonaEntity persona = new PersonaEntity();
persona.FetchUsingPK(idPersona);

Traer un registro de la base de datos (otra forma)

PersonaEntity persona = new PersonaEntity(IdPersona);

// No estoy seguro qué pasa si el IdPersona no existe,
// pero eso verifico que no sea nuevo.
if (!persona.IsNew)
{
    Console.WriteLine("Nombre = "+ persona.Nombre);
}
else
{
    Console.WriteLine("Persona no encontrada");
}

Actualizo un registro

PersonaEntity persona = new PersonaEntity();
if (persona.FetchUsingPK(1))
{
    persona.SegundoNombre = "Hernan";
    persona.Save();
}
else
{
    Console.WriteLine ("Persona no encontrada");
}

Borrar un registro

PersonaEntity persona = new PersonaEntity(IdPersona);
persona.Delete();

Filtros

PersonaCollection personas = new PersonaCollection();

// quiero un filtro equivalente al SQL "WHERE Edad > 18 AND Edad < 40"
IPredicateExpression filter = new PredicateExpression();
filter.Add(PersonaFields.Edad > 18);
filter.AddWithAnd(PersonaFields.Edad < 40);

personas.GetMulti(filter);

// recorro la colección:
foreach (PersonaEntity persona in personas)
{
    Console.WriteLine (persona.Nombre +" "+ persona.Apellido);
    foreach (TelefonoEntity telefono in persona.Telefonos)
    {
        Console.WriteLine(telefono);
    }
}

Filtro y ordenamiento

PersonaCollection personas = new PersonaCollection();

IPredicateExpression filter = new PredicateExpression();
filter.Add (PersonaFields.Edad > 18);
filter.AddWithAnd(PersonaFields.Edad < 40);

ISortExpression sorter = new SortExpression();
sorter.Add(PersonaFields.Name | SortOperator.Ascending);
sorter.Add(PersonaFields.Apellido | SortOperator.Ascending);

personas.GetMulti(filter, 0, sorter);

// recorro la colección:
foreach (PersonaEntity persona in personas)
{
    Console.WriteLine(persona.Nombre +" "+ persona.Apellido);
    foreach (TelefonoEntity telefono in persona.Telefonos )
    {
        Console.WriteLine(telefono);
    }
}

Otro filtro más elaborado

PersonaCollection personas = new PersonaCollection();

// quiero un filtro equivalente al SQL "WHERE ((Edad < 18 OR Edad > 40) AND Nacionalidad = 'Argentino')"
IPredicateExpression filtroCompleto = new PredicateExpression();

IPredicateExpression filtroPorEdades = new PredicateExpression();
filtroPorEdades.Add(PersonaFields.Edad < 18);
filtroPorEdades.AddWithOr(PersonaFields.Edad > 40);

filtroCompleto.Add(filtroPorEdades);
filtroCompleto.AddWithAnd(PersonaFields.Nacionalidad == "Argentino");

personas.GetMulti(filtroCompleto);

// recorro la colección:
foreach (PersonaEntity persona in personas)
{
    Console.WriteLine(persona.Nombre +" "+ persona.Apellido);
    foreach (TelefonoEntity telefono in persona.Telefonos)
    {
        Console.WriteLine(telefono);
    }
}

Guardar datos asociados de un solo paso:

PersonaEntity persona = new PersonaEntity();
persona.Nombre = "Marcelo";
persona.Apellido = "Ruiz";

TelefonoEntity telefono1 = new TelefonoEntity();
telefono1.Numero = "4567-1234";
telefono1.Descripcion = "Casa";

TelefonoEntity telefono2 = new TelefonoEntity();
telefono2.Numero = "4000-7896";
telefono2.Descripcion = "Trabajo";

persona.Telefonos.Add(telefono1);
persona.Telefonos.Add(telefono2);

// Guardo con "true", para indicar que guarde tmb los
// datos relacionados (telefonos).
bool resultado = persona.Save(true);
if (resultado)
  Console.WriteLine("OK");
else
  Console.WriteLine("Error");

Author: Marcelo Ruiz

Marcelo has been working as a software developer for more than 15 years. He has participated in projects for companies in USA, Mexico, Argentina, Europe and Africa. He is skilled with Microsoft technologies such as ASP.NET, MVC, C#, WCF and SQL Server, among others.

Leave a Reply

Your email address will not be published. Required fields are marked *