2017-06-22 2 views
2

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, ???);

Antwort

0

sollte wie folgt funktionieren:

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