As explained in the C# Quick Start, the C# API uses the C# class syntax, with attributes. At run-time, C# reflection is used to discover the classes with their attributes and build up an eXtremeDB database dictionary. Note that the attribute
[Persistent]
marks a C# class to be managed by the eXtremeDB runtime in an In-Memory Database. (If the database is to be stored on persistent storage, the attribute modifier[Persistent(disk=true)]
must be added.)Note that whether objects are stored in-memory or on-disk (where “disk” means a file system, regardless of the physical media) is a function of these properties (i.e. the C# class definition) and the Database.Parameter specification used when calling Database.Open(). The logic is as follows:
- if Parameters.diskClassesByDefault is set to
true
and attribute[Persistent(inmemory)]
is not specified, then objects of the class are disk based.- if Parameters.diskClassesByDefault is set to
false
and attribute[Persistent(disk)]
is not specified, then objects of the class are transient (in-memory).- if attribute
[Persistent(inmemory)]
is specified, then objects of the class are transient regardless of the value of Parameters.diskClassesByDefault- if attribute
[Persistent(disk)]
is specified, then objects of the class are persistent regardless of the value of Parameters.diskClassesByDefaultA similar set of rules apply to attribute
[Persistent(large)]
and[Persistent(compact)]
and the related property Parameters.compactClassesByDefault.The classes defined to be managed by eXtremeDB are passed into the runtime as an array of objects of the class Class (see next section). C# classes that are not passed into the runtime but are referenced within database classes will be treated as eXtremeDB structure fields.
Please refer to the C# Schema Reference Guide for detailed explanations of the usage of C# attributes to define the Database, Class, Field and Index characteristics.
Persistent Databases
For persistent database applications the database classes are defined exactly as for in-memory databases except for the class attribute
[Persistent(Disk=true)]
for all classes that will be stored on persistent media. For example:[Persistent(Disk=true)] class Obj { public int i4; };If all classes are to be stored on persistent media, an alternative is to use the Database.Parameters property
DiskClassesByDefault
for the parameters passed to the Database methodOpen()
. For example:Database.Parameters parameters = new Database.Parameters(); parameters.Classes = new Type[] { typeof(Obj) }; ... parameters.DiskClassesByDefault = true; ...