Ich versuche, eine generische Repository für mongodb zu erstellen, und followinf dieses Beispiel: https://github.com/alexandre-spieser/mongodb-generic-repositoryMit UpdateDefinition <TEntity> für MongoDB Generisches Repository
Das ist, was ich habe:
Generic Interface:
public interface IGenericRepository<TEntity> where TEntity : class, new()
{
/// <summary>
/// Generic Get One Async method
/// </summary>
/// <typeparam name="TEntity">TEntity</typeparam>
/// <param name="id"></param>
/// <returns></returns>
Task<GetOneResult<TEntity>> GetOneAsync(Guid id);
}
Generisches Implemendation
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class, new()
{
private readonly StorageContext _context = null;
public GenericRepository(StorageContext context)
{
_context = context;
}
public async Task<Result> UpdateOneAsync(Guid id, UpdateDefinition<TEntity> update)
{
var filter = new FilterDefinitionBuilder<TEntity>().Eq("Id", id);
return await UpdateOneAsync(filter, update);
}
public async Task<Result> UpdateOneAsync(FilterDefinition<TEntity> filter, UpdateDefinition<TEntity> update)
{
var result = new Result();
try
{
var collection = GetCollection<TEntity>();
var updateRes = await collection.UpdateOneAsync(filter, update);
if (updateRes.ModifiedCount < 1)
{
var ex = new Exception();
result.Message = ex.ToString();
return result;
}
result.Success = true;
result.Message = "OK";
return result;
}
catch (Exception ex)
{
result.Message = ex.ToString();
return result;
}
}
}
Inherit Repository
public class FileRepository : GenericRepository<File>, IFileRepository
{
private readonly StorageContext _context = null;
public FileRepository(StorageContext context) : base(context)
{
_context = context;
}
}
Wie Sie bei der Implementierung des generischen Repository sehen kann, gibt es einen Parameter UpdateDefinition<TEntity> update
. Sollte dieser Parameter nicht automatisch von meinem FileRepository gesetzt werden, damit ich ihn in meinem Service nicht einstellen muss? Wenn das nicht möglich ist, wie kann ich das in meinem Service anrufen?
await _fileRepository.UpdateOneAsync(fileId, ???);