Hello,
We are using CouchbaseNetClient, Version 3.1.6 and INamedBucketProvider
via DependencyInjection.
We have a repository like this:
public class EntityRepository : IEntityRepository
{
private readonly IEntityBucketProvider _entityBucketProvider;
public EntityRepository(IEntityBucketProvider entityBucketProvider)
{
_entityBucketProvider = entityBucketProvider;
}
public async Task Upsert(Entity entity)
{
var bucket = await GetBucket();
var defaultCollection = await GetDefaultCollection(bucket);
await defaultCollection.UpsertAsync(entity.Id, entity);
}
public async Task<Entity> Get(string id)
{
try
{
var bucket = await GetBucket();
var defaultCollection = await GetDefaultCollection(bucket);
var result = await defaultCollection.GetAsync(id);
return result.ContentAs<Entity>();
}
catch (DocumentNotFoundException)
{
return null;
}
}
protected async Task<IBucket> GetBucket()
{
var bucket = await _entityBucketProvider.GetBucketAsync();
return bucket;
}
protected static async Task<ICouchbaseCollection> GetDefaultCollection(IBucket bucket)
{
var defaultCollection = await bucket.DefaultCollectionAsync();
return defaultCollection;
}
}
We call GetBucket
and GetDefaultCollection
every time we want to Upsert
or Get
a document.
Does this cause a performance penalty in our client?
Another question is should we hold _defaultCollection
as a class field instead of _entityBucketProvider
in our repository class and use that in our Get
and Upsert
methods?
What solution here gives us the best performance?
Thank you