Я пытаюсь запросить данные и объекты из моей базы данных Neo4j, используя Neo4jClient в ASP.NET MVC5.Neo4jClient показывает странное поведение объектов передачи
Мне нужно структурировать возвращаемые данные в определенных объектах. Это отлично работает для IEnumerates, но не работает для отдельных объектов. Я не вижу причин для такого поведения, поскольку Neo4j сам возвращает результаты ожидаемым образом.
Здесь образца:
public class ProjectContainer
{
public string relationship { get; set; }
public int accesstype { get; set; }
public ProjectData data { get; set; }
}
var query = graphClient.Cypher
.Match("(positionData:Position)<-[relationData:HAS_POSITION]-(projectData:Project)")
.Where((PositionData positionData) => positionData.uuid == uuid)
.With("positionData, projectData, { relationship: type(relationData), accesstype:0, data: projectData } as container ")
.Return((positionData, projectData, container) => new
{
position = positionData.As<PositionData>(),
projectdata = projectData.As<ProjectData>(),
projectcontainer = container.As<ProjectContainer>(),
projects = container.CollectAs<ProjectContainer>()
});
var pos = query.Results.First();
Neo4j возвращают один JSON-объект для контейнера. pos.projects содержит - как и ожидалось - перечисление 1 элемента ProjectContainer, включая все свойства projectdata в «данных». Но я не хочу перечислять, так как всегда будет один проект.
Проблемы:
проблема: pos.projectscontainer не равно нулю, но содержит только нулевые свойства. Он должен быть заполнен тем же содержимым, что и проекты [0], но это не работает.
проблема: если я переименую свойство «данные» в «проекте» (само свойство и в с-предложением), даже pos.projectcontainer будет равен нулю. Почему имя свойства изменяет поведение, является ли «данные» каким-либо специальным ключевым словом для клиента?
Я тестировал запрос от query.Query.DebugQueryText в браузере Neo4j и результат, как и следовало ожидать, даже если я называю свойство «проект» или «данные»:
MATCH (positionData:Position)<-[relationData:HAS_POSITION]-(projectData:Project) WHERE (positionData.uuid = "c3a1eedc-5083-4784-a378-cfd2ba0bec57") WITH positionData, projectData, { relationship: type(relationData), accesstype:0, data: projectData } as container RETURN positionData AS position, projectData AS projectdata, container AS projectcontainer, collect(container) AS projects
╒══════════════════════════════╤══════════════════════════════╤══════════════════════════════╕
│"projectdata" │"projectcontainer" │"projects" │
╞══════════════════════════════╪══════════════════════════════╪══════════════════════════════╡
│{"description":"Project dummy │{"relationship":"HAS_POSITION"│[{"relationship":"HAS_POSITION│
│description","closed":false,"a│,"accesstype":"0","data":{"des│","accesstype":"0","data":{"de│
│ctive":true,"published":false,│cription":"Project dummy descr│scription":"Project dummy desc│
│"title":"Project dummy title",│iption","closed":false,"active│ription","closed":false,"activ│
│"uuid":"e4327251-d0c7-4e24-aa1│":true,"published":false,"titl│e":true,"published":false,"tit│
│2-cf7ade4a512a"} │e":"Project dummy title","uuid│le":"Project dummy title","uui│
│ │":"e4327251-d0c7-4e24-aa12-cf7│d":"e4327251-d0c7-4e24-aa12-cf│
│ │ade4a512a"}} │7ade4a512a"}}] │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
спасибо за любую помощь. Райнер
Вы используете Fiddler, чтобы увидеть, что Neo4j возвращается? –
Нет, я еще не использовал Fiddler. Я протестировал запрос из query.Query.DebugQueryText в браузере Neo4j, и результат будет таким же ожидаемым, даже если я назову свойство «проект» или «данные». (добавлен шифр и исходные результаты в сообщении) –
Поскольку 'container.CollectAs()' работает как перечисление, я надеялся, что 'container.Head(). CollectAs ()' будет работать, но также возвращает null. –