using DgraphDotNet;
using Grpc.Core;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
public class DgraphService
{
private readonly IDgraphClient _client;
public DgraphService(IConfiguration config)
{
var server = config["Dgraph:Server"];
var channelOptions = new List<ChannelOption>
{
new ChannelOption(ChannelOptions.MaxSendMessageLength, 2147483647), // ~2GB
new ChannelOption(ChannelOptions.MaxReceiveMessageLength, 2147483647) // ~2GB
};
_client = DgraphDotNet.DgraphClient.NewDgraphClient(
new[] { new GRPCConnection(server, ChannelCredentials.Insecure, channelOptions) }
);
}
public async Task<string> QueryAsync(string query, Dictionary<string, string> vars = null)
{
using var txn = _client.NewTxn();
try
{
var request = new Request { Query = query };
if (vars != null)
{
request.Vars.Add(vars);
}
var response = await txn.Query(request);
return response.Json.ToStringUtf8();
}
catch (RpcException ex)
{
throw new Exception($"gRPC error: {ex.StatusCode} - {ex.Status.Detail}", ex);
}
finally
{
await txn.Discard();
}
}
public async Task SetupSchemaAsync()
{
using var txn = _client.NewTxn();
try
{
var schema = @"
name: string @index(exact) .
";
await txn.Mutate(new Mutation { SetNquads = schema });
await txn.Commit();
}
finally
{
await txn.Discard();
}
}
public async Task InsertSampleDataAsync()
{
using var txn = _client.NewTxn();
try
{
var mutation = new Mutation
{
SetNquads = "_:alice <name> \"Alice\" ."
};
await txn.Mutate(mutation);
await txn.Commit();
}
finally
{
await txn.Discard();
}
}
}