我正在构建一个使用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();
答案 0 :(得分:1)
当您致电CreateUnique
以创建user-[:CURRENT]->work
关系时,它实际上并未附加到查询中。您需要将该行更改为:
query = query.CreateUnique("user-[:CURRENT]->work");
在您编写的第一个查询中链接的所有流畅方法都会发生这种情况。发现这些事情的最简单方法是在query.ExecuteWithoutResults();
方法上设置断点,当VS在那里打破时,将鼠标悬停在query
上,看看文本是否符合您的想法。