2017-06-22 256 views
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, ???);

回答

0

應該像這樣:

var update = Builders<BsonDocument>.Update 
    .Set("cuisine", "American (New)") 
    .CurrentDate("lastModified"); 
var result = await _fileRepository.UpdateOneAsync(fileId, update);