2017-10-27 3 views
0

Ich installierte neo4j und neo4jClient in meinem MVC Project 4.0.Neo4jClient - Abfrage gab nicht die Werte in Sicht zurück

Installieren Beispiel Filmdatenbank von der Führungs

:play movies 

Ich habe folgende Einstellungen in Web.Config:

<appSettings> 
<add key="ClientDBUrl" value="http://localhost:7474/db/data" /> 
<add key="ClientDBUser" value="neo4j" /> 
<add key="ClientDBPassword" value="password" /> 
</appSettings> 

gemacht WbApiConfig.cs in App_Start Ordner

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

Erstellt ein Modell

public class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

dann schreibe ich einfache Abfrage in Controller die Daten im Hinblick auf

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

und im Hinblick

@model IEnumerable<Neo4j_TestProject1.Models.Person> 
<table> 
    @foreach (var item in Model) { 
<tr> 
    <td> 
     @item.Name 
    </td> 
</tr> 
} 
</table> 

aber ich habe den Fehler von „Objektverweis nicht auf eine Instanz“, genaue in meiner Abfrage.

Antwort

0

Ich kann den Fehler nicht reproduzieren - aber! - Ich denke, ich weiß, wo es für dich schief läuft.

Die Movies Datensatz hat eine Person Label, aber wenn man es betrachtet, werden Sie sehen, es gibt nur 2 Eigenschaften born und name. So werden Sie Age und Id Eigenschaften werden nie eingestellt werden, ignorieren, dass im Moment, wie Sie sie nicht anzeigen - Name Eigenschaft, die Sie haben auch nicht eingestellt werden - und das ist, weil Neo4j Groß-und Kleinschreibung ist.

Wenn Sie Ihre Person Klasse zu ändern:

public class Person 
{ 
    public int Id { get; set; } 

    [JsonProperty("name")] // <-- Added 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

Sie Namen bekommen, Sie sagen im Grunde Neo4jClient für Sie zu übersetzen.

Sie könnten Ihre Person Klasse ändern, so sein:

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

dem Sie das Alter erhalten würde, wenn Sie es wollen!

Verwandte Themen