使用Neo4jClient在2个节点之间添加多个关系

时间:2014-02-22 08:27:39

标签: neo4j neo4jclient

我正在构建一个使用Neo4jClient存储数据的社交图应用程序,我正在尝试提出最佳策略来模拟用户工作和当前工作的位置。因此,我的用户与关系“USER_WORK”连接到具有StartDate / EndDate属性的多个Work节点。如果未设置EndDate,我想在用户/工作节点之间添加另一个“CURRENT”关系,以便能够以有效的方式仅获取当前工作场所。

出于某种原因,Neo4jClient不让我这样做?下面的查询执行没有异常,工作节点和除“CURRENT”之外的所有关系都被添加(是的,我已经检查过EndDate逻辑没有问题:)我也尝试过使用Create而不是CreateUnique但是没有解决问题:(

var query = graphClient.Cypher
            .Match("(city:City)", "(profession:Profession)", "(company:Company)", "(user:User)")
            .Where((CityEntity city) => city.Id == model.CityId)
            .AndWhere((ProfessionEntity profession) => profession.Id == model.ProfessionId)
            .AndWhere((CompanyEntity company) => company.Id == model.CompanyId)
            .AndWhere((UserEntity user) => user.Id == model.UserId)
            .Merge("(work:Work { Id: {Id} })")
            .OnCreate()
            .Set("work = {entity}")
            .WithParams(new
            {
                Id = entity.Id,
                entity
            })
            .CreateUnique("work-[:WORK_AS_PROFESSION]->profession")
            .CreateUnique("work-[:WORK_AT_COMPANY]->company")
            .CreateUnique("work-[:WORK_IN_CITY]->city")
            .CreateUnique("user-[:USER_WORK]->work");

        if (model.EndDate == DateTime.MinValue)
        { 
            query.CreateUnique("user-[:CURRENT]->work");
        }

query.ExecuteWithoutResults();

1 个答案:

答案 0 :(得分:1)

当您致电CreateUnique以创建user-[:CURRENT]->work关系时,它实际上并未附加到查询中。您需要将该行更改为:

query = query.CreateUnique("user-[:CURRENT]->work");

在您编写的第一个查询中链接的所有流畅方法都会发生这种情况。发现这些事情的最简单方法是在query.ExecuteWithoutResults();方法上设置断点,当VS在那里打破时,将鼠标悬停在query上,看看文本是否符合您的想法。