Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
db:db4o [2010/02/21 18:01] 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 100: | 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 ==== | ||
| Línea 153: | Línea 161: | ||
| foreach (var r in result) | foreach (var r in result) | ||
| db.Delete(r); | 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> | </code> | ||