2017-09-04 3 views
0

Je voudrais savoir si et comment je peux remplacer les méthodes CRUD d'une instance IMongoCollection. Ceci est mon objet MongoContext simplifié.Substitution des méthodes CRUD MongoDb .NET

public class MongoContext 
{ 
    protected internal MongoClient client; 
    protected internal IMongoDatabase database; 

    public MongoContext(string connectionString, string databaseName) 
    { 
     client = new MongoClient(connectionString); 
     database = client.GetDatabase(databaseName); 
    } 

    public IMongoCollection<Event> Events 
    { 
     get { return database.GetCollection<Event>("Event"); } 
    } 
} 

Et ici je l'appelle:

var mongoContext = new MongoContext("....", "EventDb"); 
var newEvent = new Event() { EventName = "Event Foo" } 
mongoContext.Events.InsertOne(newEvent); 

Pour chaque élément de cette collection, je veux stocker la date de création et le dernier jour de l'élément a été modifié.

public override void InsertOne(TDocument document, InsertOneOptions options = null, CancellationToken cancellationToken = default(CancellationToken)) 
{ 
    document.DateCreation = DateTime.UtcNow; 
} 

Comment puis-je implémenter cela?

+0

le faire dans le constructeur de l'événement et continuer à utiliser les appels mongo API standard – BOR4

+0

Je veux implémenter quelque chose de générique. Dans une application réelle, je pourrais avoir beaucoup de documents créés à partir de différents endroits. – Misi

Répondre

0

J'ai déjà rencontré ce même problème il y a quelques temps. Et même si j'ai aussi essayé de remplacer les méthodes d'origine, il n'y a pas de moyen facile de le faire. Cependant, je réussi à résoudre le problème en créant une classe de base comme

[BsonIgnoreExtraElements(Inherited = true)] 
public abstract class MongoBaseDocument 
{ 
    public BsonObjectId Id { get; set; } 

    public DateTime DateCreated { get; set; } 

    public DateTime DateModified { get; set; } 

    [BsonIgnore] 
    [JsonIgnore] 
    public bool IsNewEntity => Id == null || Id == BsonObjectId.Empty; 
} 

Et fait les autres mongo classes associées héritent comme

public class MongoObject : MongoBaseDocument 

Ceci a résolu le problème et permet d'ajouter plus de fonctionnalités si nécessaire .