Neo4jClient - Запрос не возвращал значения в представлении
Я установил neo4j и neo4jClient в моем MVC Project 4.0.
Установите пример базы данных фильмов из руководства
:play movies
Я сделал следующие настройки в Web.Config:
<appSettings>
<add key="ClientDBUrl" value="http://localhost:7474/db/data" />
<add key="ClientDBUser" value="neo4j" />
<add key="ClientDBPassword" value="password" />
</appSettings>
Сделал WbApiConfig.cs в папке App_Start
public class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
//Use an IoC container and register as a Singleton
var url = ConfigurationManager.AppSettings["ClientDBUrl"];
var user = ConfigurationManager.AppSettings["ClientDBUser"];
var password = ConfigurationManager.AppSettings["ClientDBPassword"];
var client = new GraphClient(new Uri(url), user, password);
client.Connect();
GraphClient = client;
}
public static IGraphClient GraphClient { get; private set; }
}
Создал модель
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
Затем я пишу простой запрос в контроллере, чтобы получить точные данные
public ActionResult Index()
{
var query = WebApiConfig.GraphClient.Cypher.Match("(p:Person)-[:ACTED_IN]->(m:Movie {title: 'Top Gun'})")
.Return(p => p.As<Person>()).Results;
return View(query.ToList());
}
и ввиду
@model IEnumerable<Neo4j_TestProject1.Models.Person>
<table>
@foreach (var item in Model) {
<tr>
<td>
@item.Name
</td>
</tr>
}
</table>
Но я получаю ошибку "Ссылка на объект не установлена на экземпляр" в моем запросе.
1 ответ
Я не могу воспроизвести ошибку - но! - Думаю, я знаю, что для тебя не так.
Movies
набор данных имеет Person
ярлык, но если вы посмотрите на него, вы увидите, что есть только 2 свойства born
а также name
, Так ты Age
а также Id
свойства никогда не будут установлены, игнорируя это на данный момент, поскольку вы не просматриваете их - Name
Ваше свойство также не будет установлено - и это потому, что Neo4j чувствителен к регистру.
Если вы измените свой Person
класс для:
public class Person
{
public int Id { get; set; }
[JsonProperty("name")] // <-- Added
public string Name { get; set; }
public int Age { get; set; }
}
Вы получите имена, вы в основном говорите Neo4jClient
перевести для вас.
Вы можете изменить свой Person
класс должен быть таким:
public class Person
{
private int _born;
public int Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("born")]
public int Born
{
get => _born;
set
{
_born = value;
Age = DateTime.Now.Date.Year - value;
}
}
public int Age { get; set; }
}
Какой бы тебе возраст, если ты этого хочешь!