ArangoDB在.Net中的更新操作

时间:2015-01-07 04:01:47

标签: arangodb

我是.Net开发人员,目前正在ArangoDB上进行探索。我已经玩过arangod web用户界面和arangod,并且非常喜欢这个NoSql,直到我深入研究编码的细节。我找不到.Net驱动程序正常工作。即使是简单的CRUD操作。这是问题所在。

ArangoClient.AddConnection("127.0.0.1", 8529, false, "Sample", "Sample");

var db = new ArangoDatabase("Sample");

string collectionName = "MyTestCollection";
var collection = new ArangoCollection();
collection.Name = collectionName;
collection.Type = ArangoCollectionType.Document;

if (db.Collection.Get(collectionName) == null)
{
    db.Collection.Create(collection);
}

var employee = new Employee();

employee.Id = "1234";
employee.Name = "My Name";
employee.Salary = 33333;
employee.DateOfBirth = new DateTime(1979, 7, 22);

db.Document.Create<Employee>("MyTestCollection", employee);

employee.Name = "Tan";
db.Document.Update(employee); 

它抛出了db.Document.Update(employee)的错误。这是错误消息:字段'_id'不存在。

然后我尝试添加字段_id,虽然我认为这很奇怪,它提示我另一条错误信息。

Arango.Client.ArangoException : ArangoDB responded with error code BadRequest:
expecting PATCH /_api/document/<document-handle> [error number 400]
   at Arango.Client.Protocol.DocumentOperation.Patch(Document document, Boolean waitForSync, String revision)
   at Arango.Client.ArangoDocumentOperation.Update[T](T genericObject, Boolean waitForSync, String revision) ...

我根本没有线索,也不知道如何继续前进。任何帮助都感激不尽。感谢。

1 个答案:

答案 0 :(得分:4)

这可能是由Employee类的定义造成的,该类未包含在上述代码段中。

要识别集合中的文档,文档具有特殊的系统属性,例如_id_key_rev。即使未明确使用,这些属性也应映射到.NET类中的属性。因此,班级中的一个属性应标记为&#34; Identity&#34;,一个用&#34; Key&#34;,一个用&#34; Revision&#34;。这是一个应该有效的示例类定义:

public class Employee
{
    /* this will map the _id attribute from the database to ThisIsId property */
    [ArangoProperty(Identity = true)]
    public string ThisIsId { get; set; }

    /* this will map the _key attribute from the database to the Id property */
    [ArangoProperty(Key = true)]
    public string Id { get; set; }

    /* here is _rev */        
    [ArangoProperty(Revision = true)]
    public string ThisIsRevision { get; set; }

    public DateTime DateOfBirth { get; set; }
    public string Name { get; set; }
    public int Salary { get; set; }

    public Employee()
    {
    }
}

ThisIsId属性将包含自动分配的_id值,也可以在以后轻松检索文档:

var employeeFromDatabase = db.Document.Get<Employee>(employee.ThisIsId);

您当然可以将属性重命名为您的属性。