我是.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) ...
我根本没有线索,也不知道如何继续前进。任何帮助都感激不尽。感谢。
答案 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);
您当然可以将属性重命名为您的属性。