Skip to content

GettingStartedWithCSharp

Charlotte Skardon edited this page Feb 7, 2023 · 5 revisions

#Getting Started With C#

This is a quick start guide that'll show you how to connect to Neo4j, it assumes you have Neo4j running either locally or on a URL you have access to.

Add Neo4jClient Package

  1. Create (or open) a project that you want to add Neo4jClient to.
  2. In the Package Manager run: Install-Package Neo4jClient

NB. If you've downloaded a release and built it, add a reference as you normally would.

Connect to the Database

From here on in, we're going with the assumption the database is at neo4j://localhost:7687/, obviously replace this with your own URL if you've setup the DB elsewhere.

All the operations made against the DB are made from the BoltGraphClient class, so we need to first instantiate one of those:

var client = new BoltGraphClient("neo4j://localhost:7687");

You may want to pass authentication information along as well, this can be done via the overload:

var client = new BoltGraphClient("neo4j://localhost:7687", "username", "password");

Once the client is instantiated, you need to Connect to the database:

await client.ConnectAsync();

At this point your client is connected to the database and you're ready to start querying.

Errors from connecting

If you get an error (in the form of an Exception) from the ConnectAsync method, there are a few things to check:

  • Is the Neo4j server definitely running?
    • Open up the URL (http://localhost:7474/) and see if you can see the management page, if not - start Neo4j and try again.

Your first query

All the queries are based around the Cypher language, and it is recommended that you get comfortable with Cypher via the Neo4j documentation.

We'll use the 'Movies' demo application, so go to your server (http://localhost:7474) and type :play movies into the $ text box. Then click on the code and run it to insert the data.

Once the database is set up we can start to code against it.

Create a new C# console application and add this class to it:

public class Movie
{
    [JsonProperty(PropertyName = "title")]
    public string Title { get; set; }

    [JsonProperty(PropertyName = "released")]
    public int Released { get; set; }

    [JsonProperty(PropertyName = "tagline")]
    public string TagLine { get; set; }
}

The JsonProperty attributes are there to allow Json.NET to translate between the Java style of property naming that the Movies data uses and the .NET style for the class. We could have just done something like:

public class Movie 
{
    public string title { get; set; }
    /*etc*/
}

But the various C# style guides and helpers StyleCop/Resharper etc will tell you that's not on.

Now we have our class, let's get write out query:

var movies = client.Cypher
                  .Match("(m:Movie)")
                  .Return(m => m.As<Movie>())
                  .Limit(10)
                  .Results;

At this point, we have the query, but until we start to process the results nothing has actually been sent to the server. So let's write out some movies:

foreach (var movie in movies)
    Console.WriteLine("{0} ({1}) - {2}", movie.Title, movie.Released, movie.TagLine);

When you run the application you'll get a list of 10 of the movies from the database.

What next

You have the client set up and have a query working - so now would be a good time to head over to the Cypher and Cypher Examples pages and look at the other things you can do.