Cassandra - correct approach asp.net core application

Viewed 1932

I creating new asp.net core project and I decided to use Cassandra as a Database but I never do it before. I don't know my approach is correct? Can you gave me some advice to use this DB in .net core. (I using autofac as a dependency injection container, cassandra provider: CassandraCSharpDriver)

My current solve:

Create Cluster:

cluster = Cluster.Builder()
    .AddContactPoint(cassandraData.ContactPoint)
    .WithPort(int.Parse(cassandraData.Port))
    .WithCredentials(cassandraData.User, cassandraData.Password)
    .Build();

After that i inject this by dependency injection to my Session Cache:

public CassandraSessionCache(Cluster cluster)
{
    _cluster = cluster;
    _sessions = new ConcurrentDictionary<string, Lazy<ISession>>();
}

public ISession GetSession(string keyspaceName)
{
    if (!_sessions.ContainsKey(keyspaceName))
        _sessions.GetOrAdd(keyspaceName, key => new Lazy<ISession>(() => 
    _cluster.Connect(key)));

    var result = _sessions[keyspaceName];

    return result.Value;
}

I Create also Map to Cassandra and use it my startup class.

After this configuration my repository look like this:

public class TestRepository : ITestRepository
{
    private readonly CassandraSessionCache _cassandra;
    private Mapper _mapper;

    public TestRepository(CassandraSessionCache cassandra)
    {
        _cassandra = cassandra;
    }

    public async Task DeleteAsync(Guid id, string keySpace)
    {
        SetSessionAndMapper(keySpace);

        await _mapper.DeleteAsync<Test>("WHERE id = ?", id);
    }

    public async Task<Install> GetAsync(string id, string keySpace)
    {
        SetSessionAndMapper(keySpace);

        return await _mapper.FirstOrDefaultAsync<Test>("SELECT * FROM \"Test\" WHERE id = ?", id);
    }

    public async Task PostAsync(Test data, string keySpace)
    {
        SetSessionAndMapper(keySpace);

        await _mapper.InsertAsync(data);
    }

    private void SetSessionAndMapper(string keySpace)
    {
        var session = _cassandra.GetSession(keySpace);
        _mapper = new Mapper(session);
    }
}

All is correct or I do something wrong?

0 Answers
Related