2
我試圖創建MongoDB的一個通用存儲庫,並followinf這個例子:https://github.com/alexandre-spieser/mongodb-generic-repository使用UpdateDefinition <TEntity> MongoDB的通用倉庫
這是我有:
通用接口:
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);
}
通用實施
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;
}
}
}
繼承庫
public class FileRepository : GenericRepository<File>, IFileRepository
{
private readonly StorageContext _context = null;
public FileRepository(StorageContext context) : base(context)
{
_context = context;
}
}
正如你可以在通用存儲庫的實現看到有一個參數UpdateDefinition<TEntity> update
。不應該由我的FileRepository自動設置此參數,以便在我的服務中我不必設置它? 如果這是不可能的,我該如何在我的服務中調用它?
await _fileRepository.UpdateOneAsync(fileId, ???);