Persistencia de Objetos con XPO
Estos dÃas estoy probando varias soluciones de persistencia de Objetos ya que estoy pensando seriamente dejar de usar Deklarit porque van muy lentos con las versiones.
El primero que he probado ha sido XPO de DevExpress, es bastante potente y fácil de usar aunque el generador de clases desde una BD existente es un poco pobre, no te genera las relaciones ni las tablas cuya PK este compuesta por varios campos, eso tendremos que solucionarlo a mano, aquà podéis ver como.
El tema de PK por múltiples campos se soluciona creando una estructura donde definimos la clave primaria y luego en la clase que mapeamos a la tabla definimos esa estructura como PK
public struct MyTablePK
{
[Persistent("Field1")]
public string FieldKey1;
[Persistent("Field2")]
public string FiledKey2;
}
[OptimisticLocking(false)]
[Persistent("Table")]
public class MyTable : XPBaseObject
{
[Key(), Persistent()]
public MyTablePK PK;
public string Field3;
public string Field4;
public MyTable(Session session) : base(session) { }
public MyTable() : base(Session.DefaultSession) { }
public override void AfterConstruction() { base.AfterConstruction(); }
}
El tema de la relaciones se soluciona utilizando el atributo [Association] en la propiedad donde definimos la colección de objetos hijos indicándole el nombre que le hemos dado en el SQL al FK
[OptimisticLocking(false)]
[Persistent("Table")]
public class MyTable : XPBaseObject
{
[Key(true)]
public int PK;
public string Field1;
public string Field2;
[Association("Table-ChildTable", typeof(MyChildTable)), Aggregated]
public XPCollection Childs
{
get { return GetCollection("MyChildTable"); }
}
public MyTable(Session session) : base(session) { }
public MyTable() : base(Session.DefaultSession) { }
public override void AfterConstruction() { base.AfterConstruction(); }
}
[OptimisticLocking(false)]
[Persistent("ChilTable")]
public class MyChildTable : XPBaseObject
{
public int FK;
public int PK;
public string Field1;
public string Field2;
public MyChildTable(Session session) : base(session) { }
public MyChildTable() : base(Session.DefaultSession) { }
public override void AfterConstruction() { base.AfterConstruction(); }
}
Pues nada, sigo probando cosas, ya iré comentando
Tags: C#, Herramientas, RAD, SQLServer


