Herramientas de usuario

Herramientas del sitio


db:db4o

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
db:db4o [2010/02/21 16:56]
alfred
db:db4o [2020/05/09 09:25] (actual)
Línea 44: Línea 44:
   * {{db:​db4o:​db4o-6.0.rar|Binarios}}   * {{db:​db4o:​db4o-6.0.rar|Binarios}}
   * {{db:​db4o:​objectmanager-_6.4-java.zip|ObjectManager}}   * {{db:​db4o:​objectmanager-_6.4-java.zip|ObjectManager}}
 +
 +
 +
 +
 +
  
  
Línea 71: Línea 76:
 IObjectSet result = db.Get(new Pilot () { Name = "​Pedro"​ }); IObjectSet result = db.Get(new Pilot () { Name = "​Pedro"​ });
 </​code>​ </​code>​
 +=== Utilizando el método Query (Native Query) ===
 +Podemos utilizar el método ''​Query''​ que requiere de un delegado que reciba por parámetro el tipo de elemento consultado y que devuelva un bool, de esa forma internamente se va llamando a este por cada elemento y se comprueba lo deseado.
 +<code csharp>
 +public IList<​Pilot>​ GetThePilot (Pilot templatePilot)
 +{
 +    IList<​Pilot>​ pilots = db.Query<​Pilot>​ ( 
 +        delegate(Pilot match)
 +        {
 +            return ((match.name == templatePilot.name) && (match.id == templatePilot.id))
 +        } );
 +    return pilots;
 +}
 +</​code>​
 +
 === Queries con LINQ === === Queries con LINQ ===
 Aunque las versiones anteriores de Mono tienen un uso bastante precario de LINQ este sí que puede ser aprovechado para las consultas a una base de datos db4o.  \\  Aunque las versiones anteriores de Mono tienen un uso bastante precario de LINQ este sí que puede ser aprovechado para las consultas a una base de datos db4o.  \\ 
Línea 84: Línea 103:
 </​code>​ </​code>​
  
 +=== Notas ===
 +  * Para tipar el resultado:
 +<code csharp>
 +var template = new Car () { marca = null };
 +var result = db.Get(template).Cast<​Car>​();​
 +var first = result.FirstOrDefault();​
 +var list = result.ToList();​
 +</​code>​
  
 ==== Acciones básicas ==== ==== Acciones básicas ====
 +<code csharp>
 +class Pilot
 +{
 +    public int id {get; set; }
 +    public string name {get; set;}
 +    public List<​Car>​ lCars = new List<​Car>​();​
 +}
 +class Car
 +{
 +    public string marca;
 +}
 +</​code>​
 +
 === Insertar === === Insertar ===
 +Para insertar un elemento llamaremos al método ''​Set'':​
 +<code csharp>
 +db.Set(new Pilot () { id = 1, name = "​Juan"​ });
 +</​code>​
 +Si un objeto insertado tiene otros objetos internamente (como por ejemplo la clase ''​Pilot''​ que tiene una lista de la ''​Car''​) aparecerá en la base de datos otra "​tabla"​ con los objetos, por ejemplo objetos ''​Car''​ de los ''​Pilot''​ que se van insertando. \\ 
 +Si en el código se ha asignado un mismo ''​Car''​ a varios ''​Pilot''​ no se duplicará en la tabla de la clase ''​Car''​. \\ 
 +Al eliminar objetos ''​Pilot''​ no se eliminarán los ''​Car''​ en la tabla.
 +
 === Actualizar === === Actualizar ===
 +Para actualizar un elemento símplemente tenemos que recoger lo que queramos actualizar, cambiarlo y volver a colocarlo en la DB llamando al método ''​Set''​. \\
 +La siguiente consulta recoge todos los pilotos con un coche "​mini"​ y actualiza sus nombres agregandoles "​minimalistas"​.
 <code csharp> <code csharp>
 +IObjectContainer db = Db4oFactory.OpenFile("​prueba.db"​);​
 +var result = from p in db.Query<​Pilot>​()
 +             from c in p.lCars
 +             where (c.marca == "​MINI"​)
 +             ​select p;
 +foreach (var r in result)
 +{
 +    r.name = r.name + " - Minimalistas";​
 +    db.Set(r);
 +}
 +db.Close();
 </​code>​ </​code>​
 === Eliminar === === Eliminar ===
 +Eliminar funciona igual que actualizar, únicamente cambia la llamada al método de la DB, esta vez el método es ''​Delete''​. \\ 
 +El siguiente código elimina todos los pilotos que tengan un mini:
 +<code chsarp>
 +var result = from p in db.Query<​Pilot>​()
 +             from c in p.lCars
 +             where c.marca == "​MINI"​
 +             ​select p;
 +foreach (var r in result)
 +    db.Delete(r);​
 +</​code>​
 +
 +
 +==== Acciones avanzadas ====
 +=== Generación de IDs ===
 +''​db4o''​ por defecto genera un identificador ''​long''​ para cada objeto insertado en la DB. \\ 
 +Para coger la id de un objeto haremos: ''​db.Ext().GetID(object);''​ \\ 
 +Para coger un objeto a partir de su id haremos: ''​db.Ext().GetByID(id);''​ \\ \\ 
 +Opcionalmente también se pueden generar los UUID (//Unique Universal IDs//), que son identificadores universales para que elementos que se compartan entre diferentes DB.
 +
 +
 +
 +=== Indexar un campo ===
 +Para crear un índice deberemos de poner la siguiente línia **antes de abrir la base de datos**:
 +<code csharp>
 +Db4oFactory.Configure().ObjectClass(typeof(NombreClase)).ObjectField("​NombreCampo"​).Indexed(true);​
 +</​code>​
 +El campo que queramos indexar **no puede ser un campo autoimplementado**,​ es decir, que sea así:
 +<code csharp>
 +int id { get; set; }
 +</​code>​
 +Sería algo así:
 +<code csharp>
 +class Program
 +{
 +    public int id;
 +    public int name;
 +    static void Main(string[] args)
 +    {
 +        Db4oFactory.Configure().ObjectClass(typeof(Program)).ObjectField("​id"​).Indexed(true);​
 +        var db = Db4oFactory.OpenFile("​c:​\\prueba.db"​);​
 +...
 +</​code>​
 +
 +==== Creación de servidor ====
 +=== Embedded ===
 +Para usar accesos concurrentes desde un mismo ejecutable:
 +<code csharp>
 +IObjectServer server = Db4oFactory.OpenServer(dbPath,​ 0);
 +IObjectContainer client1 = server.OpenClient();​
 +IObjectContainer client2 = server.OpenClient();​
 +// ...
 +client1.Close();​
 +client2.Close();​
 +server.Close();​
 +</​code>​
 +=== En red ===
 +Para que funcione en red, el servidor:
 +<code csharp>
 +public void Start()
 +{
 +    lock (this)
 +    {
 +        IObjectServer server = Db4oFactory.OpenServer("​c:​\\db.db4o",​ 1258);
 +        server.GrantAccess(USER,​ PASSWORD);
 +        Monitor.Wait(this);​
 +    }
 +}
 +</​code>​
 +Y el cliente:
 +<code csharp>
 +IObjectContainer db = Db4oFactory.OpenClient(SERVER_HOST,​ 1258, USER, PASSWORD);
 +</​code>​
db/db4o.1266771372.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)