Вызов TimeTree с использованием Neo4jClient

Я использую код ниже в попытке вызвать TimeTree из Neo4jClient.

Другие простые Calls работают, но этот просто ничего не делает. Нет ошибок, но нет и нового объекта времени.

public class Trip
{
    public long Id { get; set; }
    public string Name { get; set; }
}

public class UUID
{
    public long Value { get; set; }
}

public class TimeStamp
{
    //public long Id { get; set; }
    //public string Name { get; set; }

    public long time { get; set; }
}


public class User
{
    public long Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

class Program
{
    static void Main(string[] args)
    {

        var client = new Neo4jClient.GraphClient(new Uri("http://localhost:7474/db/data"), "neo4j", "password");
        client.Connect();


        client.Cypher
            .Match("(n)")
            .DetachDelete("n")
            .ExecuteWithoutResults();


        var newUser = new User { Id = 456, Name = "Jim" };
        client.Cypher
            .Create("(user:User {newUser})")
            .WithParam("newUser", newUser)
            .ExecuteWithoutResults();

        var newTrip = new Trip { Id = 001, Name = "Antibes" };
        client.Cypher
            .Match("(traveller:User)")
            .Where((User traveller) => traveller.Id == 456)
            .Create("(traveller)-[:TRAVELLING]->(travelling:Trip {newTrip})")
            .WithParam("newTrip", newTrip)
            .ExecuteWithoutResults();

        var tstamp = client.Cypher
              .Match("(trip:Trip)")
              .Where((Trip trip) => trip.Name == "Antibes")
              .With("trip AS tripToLink")
              .Call("ga.timetree.events.attach({ node: 'tripToLink', time: 1483828451000, relationshipType: \"ARRIVING_ON\"})")
              .Yield("node")
              .Return(node => new { TimeStamp = node.As<TimeStamp>() });

В командной консоли работает следующее:

MATCH (trip:Trip)
WHERE trip.Name = "Antibes"
WITH trip
CALL ga.timetree.events.attach({node: trip, time: 1483828451000 , relationshipType: "ARRIVING_ON"})
YIELD node RETURN node

1 ответ

Решение

Прежде всего - хорошая работа по размещению всего кода, это сделало жизнь намного проще!

Я считаю, что проблема здесь в два раза: tstamp Ваша переменная имеет тип: ICypherFluentQuery<???> (Я использую "?" Для представления анонимного типа, который вы создаете) - поэтому вам нужно получить результаты, чтобы получить любой ответ. Пока ты не позвонишь .Results вы на самом деле не выполняете запрос.

Как правило, мне нравится создавать запрос, как у вас, а затем выполнять после:

var tstamp = client.Cypher....
    /* rest of the query here */

var tStampResults = tstamp.Results;

Когда вы сделаете это, вы, вероятно, получите ошибку:

BadInputException: java.lang.String cannot be cast to org.neo4j.graphdb.Node

Если вы посмотрите на свой ответ на запрос, который вы запускаете в консоли, то увидите, что вы действительно вернетесь:

╒═══════════════════════════╕
│"node"                     │
╞═══════════════════════════╡
│{"Id":"1","Name":"Antibes"}│
└───────────────────────────┘

и это потому что ты YIELDИНГ nodeтак что вы сможете только Trip тип:

var query = client.Cypher
    .Match("(trip:Trip)")
    .Where((Trip trip) => trip.Name == "Antibes")
    .With("trip")
    .Call("ga.timetree.events.attach({node: trip, time: 1483828451000 , relationshipType: \"ARRIVING_ON\"})")
    .Yield("node")
    .Return(node => node.As<Trip>()); //<-- Change here
Другие вопросы по тегам