Abhi
Abhi

Reputation: 2013

Task async with neo4jclient is not adding relationships in loop for all nodes

I am calling 2 async methods in loop.

First one is to create node and second is to add relation. its creating node all time but its not creating all relationships Eg - if there are 4 degrees , its creating 3 degrees but its not creating relationship with all 4. even if JobPost and JobDegrees both nodes are present. Why its not creating relationship?

DegreesList - here I am passing array of an object.

Here is the code -

private void Map_Job_DEGREES(GUID JobId, dynamic DegreesList)
{
try
{ 
    foreach (var objdegree in DegreesList)
    {
        string degreename = Convert.ToString(objdegree.name);
        degreename = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(degreename);
        JobDegrees objnew1 = new JobDegrees();
        objnew1.name = degreename; 
        Task.Run(async () => await repo.Insert_JobDegrees(objnew1));
        Task.Run(async () => await repo.CreateRelationship_DEGREES_INCLUDED(JobId, degreename));
    } 
}
catch { }
}




public class JobPostingNeo4jRepository
    {
      public async Task Insert_JobDegrees(JobDegrees obj1) 
      {
        try
         {
            await _graphClient.ConnectAsync();
            await _graphClient.Cypher
                 .Merge("(obj1:JobDegrees { name: $name })")
                 .OnCreate()
                 .Set("obj1 = $obj1")
                 .WithParams(new
                 {
                     name = obj1.name,
                     obj1
                 })
                 .ExecuteWithoutResultsAsync();
         }
         catch (Exception ex)
         {
            throw ex;
         }
      }



     public async Task CreateRelationship_DEGREES_INCLUDED(Guid JobId, string name)
     {
        try
        {
            await _graphClient.ConnectAsync();
            await _graphClient.Cypher
           .Match("(obj1:JobPost)", "(obj2:JobDegrees)")
           .Where((JobPost obj1) => obj1.Id == JobId)
           .AndWhere((JobDegrees obj2) => obj2.name == name)
          .Merge("(obj1)-[:DEGREES_INCLUDED { createddate: $createddate }]->(obj2)")
           .WithParams(new { createddate = DateTime.UtcNow })
           .ExecuteWithoutResultsAsync();
        }
        catch (Exception ex)
        {
            throw ex;
        }
     }
 }

Upvotes: 0

Views: 44

Answers (0)

Related Questions