A C# wrapper for db4o that provides concurrent-read/single-write access to objects for use in a web-based game engine. It provides automatic transparent persistence without requiring post-build manipulation.
UnPersist is used when storing a transient to db4o to ensure it does not contain any references to persistent object anywhere in the object graph. It does not yet handle IList<> and IDictionary<,> generic collections but it probably should!
Db4o supports indexing on specific object properties which can help speed up queries, this functionality is not exposed though Coincidental, so need to determine a way of doing it (perhaps through attributes?).
Hi this project looks very interesting (and I'm going to have a play with it) but is it up to date - there have been no commits for a long time so perhaps there is newer code.
Also, would it be possible to release the code under a less restrictive licence? Not all my code is GPL...
It would be nice if Coincidental could keep track of reference counts for specific object types (perhaps objects that implement an orphan tracking interface of some kind).
Since it intercepts assignments of references it should be feasible to update reference counters within the objects (using an independent locking method perhaps).
The application should then be able to request all orphaned objects of a specific type from Coincidental, or perhaps Coincidental could automatically delete orphaned objects that implement the tracking interface (optional via configuration).
Querying db4o using a base class as reference so that you retrieve everything that descends from that class should work fine, however Coincidental uses the type passed in to determine the type of proxy to create, this mean the proxies are all of the base type and not the actual type of the objects returned from db4o. Coincidental needs to handle types more intelligently to allow for more complex queries.
If you construct a query where you are comparing instances of objects rather than values, it will fail because the values against which you are comparing are likely to be the persistent proxies and not the source objects, so db4o will see them as different. Probably need to intercept any value resolving in the query and ensure any references are resolved to the source reference and not the proxy!