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; }
}

Какой бы тебе возраст, если ты этого хочешь!

Другие вопросы по тегам