-
Notifications
You must be signed in to change notification settings - Fork 19
Home
- Installation
- Setup database connection pool with OClient
- Working with ODatabase instance
- ODocument class
- Query and Command methods
- Fluent API for SQL queries
- Changelog
- Limitations
- ToDo list
Download/install nuget package or clone repository and build/reference Orient.Client dll file.
Pool of pre-initialized database connections can be created with OClient.CreateDatabasePool static method with connection parameters. Reason behind connection pooling is to save time during which the client connects with server. Once pool is initiated it contains a number of ready to use persistent connections which are used by ODatabase object transparently. Previously created database connect pools can be removed with OClient.DropDatabasePool static method.
OClient.CreateDatabasePool(
"127.0.0.1",
2424,
"TestDatabaseName",
ODatabaseType.Graph,
"admin",
"admin",
10,
"myTestDatabaseAlias"
);Pre-created connections in the database pool are used when ODatabase class is instantiated with alias parameter. Use of ODatabase instance should be short living in order to return assigned connection to the pool as soon as possible for further reuse.
using (ODatabase database = new ODatabase("myTestDatabaseAlias"))
{
// use database functionality within this context
}If the database instance isn't enclosed with using keyword it should be closed as soon as possible by calling Close or Dispose methods.
ODatabase database = new ODatabase("myTestDatabaseAlias");
// some code dealing with database instance
database.Close(); // or database.Dispose()Database operations return results in the form of ODocument objects which contain several OrientDB specific properties and encapsulated fields in the form of Dictionary<string, object> data structure similar to JSON object. These fields can be manipulated by three basic methods that are used to check, retrieve and store data.
| ODocument object | |
|---|---|
| OrientDB specific properties | Methods for fields manipulation |
|
ORID OVersion OType OClassName OClassId |
HasField GetField SetField |
It is also possible to retrieve or store nested/embedded objects within fields with dot notation. Example usage is shown below:
ODocument document = new ODocument();
document.SetField("foo", "foo string value");
document.SetField("bar", 12345);
document.SetField("embedded.foo", "embedded foo string value");
if (document.HasField("foo") && document.HasField("bar") && document.HasField("embedded.foo"))
{
string foo = document.GetField<string>("foo");
int foo = document.GetField<int>("bar");
string embeddedFoo = document.GetField<string>("embedded.foo");
}ODatabase class provides Query method for idempotent (e.g. select) and Command method for non-idempotent (e.g. insert, update, ...) commands for executing raw SQL query strings. To know more about OrientDB querying capabilities check out its SQL docs.
using (ODatabase database = new ODatabase("myTestDatabaseAlias"))
{
database.Command("INSERT INTO Profile (name, surname) values ('Jay', 'Miner')");
List<ODocument> result = database.Query("SELECT FROM Profile");
foreach (ODocument document in result)
{
Console.WriteLine(
"Doc {0} class {1}: {2} {3}",
document.ORID.ToString(),
document.OClassName,
document.GetField<string>("name"),
document.GetField<string>("surname")
);
}
}ODatabase instance, apart from raw SQL strings, also provides fluent API (aka chaining) to help developers construct SQL commands in a more generic and structured way. For example instead of writing and executing raw SQL query in string form, fluent API provides chainable method calls which help to construct and execute the query.
| Raw string | Fluent/chaining |
|---|---|
| ``` csharp List result = database.Query( "SELECT foo AS myFoo, " + "bar AS myBar " + "FROM OGraphVertex " + "WHERE someCollection CONTAINS 'some value' " + "AND someField = 123" ); ``` | ```csharp List result = database .Select("foo").As("myFoo") .Also("bar").As("myBar") .From() .Where("someCollection").Contains("some value") .And("someField").Equals(123) .ToList(); ``` |
ToList method in case of idempotent operations and Run method in case of non-idempotent operations is used to execute the underlying SQL query which was constructed by the fluent API. ToString method returns actual raw SQL query string.
| ToString | Run | ToList |
|---|---|---|
| ```csharp // CREATE CLASS TestVertexClass EXTENDS OGraphVertex string query = database .Create.Class("TestClass") .Extends("OGraphVertex") .ToString(); ``` | ```csharp short classId = database .Create.Class("TestClass") .Run(); ``` | ```csharp List result = database .Select("foo", "bar") .From("TestClass") .ToList(); ``` |
More examples on using the fluent API: