This is a fork of the original Neo4j Type Provider by Pete Bayne on BitBucket.
Original Neo4j Type Provider blog post
I forked it and made some changes to make it work with v. 3 of Neo4j. See my blog post:
First you need to instantiate the type like this.
[<Literal>] let ConnectionString = @"http://localhost:7474/db/data" //the db should be populated type IVRSchema = Haumohio.Neo4j.Schema< ConnectionString > You can get at your graphs labels like this (see my previous post on the IVR graph).
let startLabel = IVRSchema.Labels.STARTYou can get at a label's property fields like this.
let endIdField = IVRSchema.Props.END.idYou can get at a relationship like this.
let successRelationship = IVRSchema.Rels.SUCCESSYou can get a node as an object like this.
let entryNode = IVRSchema.Proxies.ENTRYPutting it all together you can do something like this to get a list of related nodes. In this case the path is from an entry node to the next entry node through the success relationship. Here I am using Neo4jClient.
type IVRSchema = Haumohio.Neo4j.Schema< ConnectionString > let db = new Neo4jClient.GraphClient(Uri(ConnectionString)) db.Connect() let data = db.Cypher .Match(sprintf "(s:%s)-[r:%s]->(e:%s)" IVRSchema.Labels.START IVRSchema.Rels.GOTO IVRSchema.Labels.ENTRY) .Return(fun (s:ICypherResultItem) (e:ICypherResultItem) -> (s.As<IVRSchema.Proxies.START>(), e.As<IVRSchema.Proxies.ENTRY>())) .Results let sNode, eNode = data |> Seq.head This is a nice way to work with your database's schema and it will naturally update as the source database changes.
I |> heart TypeProviders