# IT:ArangoDB:HowTo:API/C# #
* [[../|(UP)]]
{{indexmenu>.#2|nsort tsort}}
## Summary ##
A C# Client to the Server's REST API is available via nuget:
Install-Package ArangoDB-NET
## Process ##
An example of it's usage is as follows:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace XAct.Spikes.ArangoDB01
{
using Arango.Client;
internal class Program
{
private static void Main(string[] args)
{
//Register an Alias in order to make it easier to creat Client's later:
ArangoClient.AddConnection(
"localhost",
8529,
false,
"testDB",
"myDbAlias"
);
//Open a connection to the Db:
var db = new ArangoDatabase("myDbAlias");
//Work with Collections:
ArangoCollection collection;
collection = db.Collection.Get( "demos2");
if (collection == null){db.Collection.Create(new ArangoCollection { Name = "demos2" });}
Document document;
X typedDocument;
//Create a document as an array, or map it to a Type:
document = new Document("{fk:\"foo/123\"}");
db.Document.Create("demos2", document);
typedDocument = new X {fk = "bar/123"};
db.Document.Create("demos2", typedDocument,true);
//Notice how the _ref,_key,_id values of the Document were filled in?
//Notice how the _ref,_key,_id values of the TypedDocument are only filled
//in if the Entity is decorated with ArangoPropertyAttribute ?
//Get a document as an array, or map it to a Type:
document = db.Document.Get("vertices/40915261");
typedDocument = db.Document.Get("vertices/40915261");
//Update Records:
typedDocument.fk = "Email/123";
db.Document.Update(typedDocument);
//etc...
}
public class X : RecordHandleBase
{
public string fk { get; set; }
}
public abstract class EdgeRecordHandleBase : RecordHandleBase , IEdgeRecordHandle
{
[ArangoProperty(From = true)]
public string ThisIsFrom { get; set; }
[ArangoProperty(To = true)]
public string ThisIsTo { get; set; }
}
public abstract class RecordHandleBase : IRecordHandle
{
[ArangoProperty(Identity = true)]
public string _id { get; set; }
[ArangoProperty(Revision = true)]
public string _rev { get; set; }
[ArangoProperty(Key = true)]
public string _key { get; set; }
}
public interface IRecordHandle
{
//Unfortunately this won't work:
//has to be on a Class, not an inteface :-(
//[ArangoProperty(Identity = true)]
string _id { get; set; }
string _rev { get; set; }
string _key { get; set; }
}
public interface IEdgeRecordHandle
{
[ArangoProperty(From = true)]
string ThisIsFrom { get; set; }
[ArangoProperty(To = true)]
string ThisIsTo { get; set; }
}
}
}
## Resources ##
* https://github.com/yojimbo87/ArangoDB-NET