¡Esta es una revisión vieja del documento!
Una vez instalado en C:\Archivos de programa\Db4objects\db4o-7.8\bin tendremos localizadas las distintas librerías, por ejemplo, la necesaria para utilizar db4o en programas de escritorio es C:\Archivos de programa\Db4objects\db4o-7.8\bin\net-3.5\Db4objects.Db4o.dll.
En Ubuntu puedes conseguir db4o desde el repositorio oficial.
Primero deberemos incluir la referencia a Db4objects.Db4o y los namespaces necesarios para acceder a las clases que utilizaremos:
using Db4objects.Db4o;
Para abrir una base de datos deberemos llamar al método estático OpenFile de la clase Db4oFactory pasandole la ruta del archivo de DB con el que vayamos a trabajar. Esto devolverá un IObjectContainer que representará a la base de datos.
El método Close del IObjectContainer cerrará la DB.
IObjectContainer db = Db4oFactory.OpenFile(@"c:\prueba.db"); try { // Operaciones con la base de datos } finally { db.Close(); }
La versión 6.0 es una versión accesible con las versiones actuales de Mono (21 de febrero de 2010), sobre ella puede utilizarse LINQ y es perfectamente usable. Aún así no utilices un ObjectManager de una versión superior sobre una DB de esta versión porque la corromperá.
Para ello lo haremos con el método Get del IObjectContainer, pudiendo hacerlo de dos formas:
typeof.// Forma 1: IObjectSet result = db.Get(typeof(Car)); foreach (var b in result) Console.WriteLine(((Car)b).marca); // Forma 2: IObjectSet result = db.Get(new Car () { marca = null });
Para lanzar la consulta simplemente llamaríamos al Get sólo asignando la propiedad por la que queremos buscar:
IObjectSet result = db.Get(new Pilot () { Name = "Pedro" });
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.
La siguiente query busca el nombre de los pilotos con un mini ordenando el resultado por el número de coches que estos tienen:
var result = from p in db.Query<Pilot>() from c in p.lCars where (c.marca == "MINI") orderby p.lCars.Count select p; foreach (var r in result) System.Console.WriteLine(r.name);