2017-09-04 93 views
0

我想知道是否以及如何覆盖IMongoCollection实例的CRUD方法。 这是我简化的MongoContext对象。覆盖MongoDb .NET CRUD方法

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"); } 
    } 
} 

这里我称之为:

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

对于此集合我想存储创建日期和最后一天的元素被修改每一个元素。

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

我该如何实现?

+0

在事件的构造函数中执行它,并继续使用标准mongo API调用 – BOR4

+0

我想实现一些通用的东西。在一个真正的应用程序中,我可以从很多不同的地方创建大量文档。 – Misi

回答

0

前段时间我遇到了同样的问题。 虽然我也尝试覆盖原来的方法,但没有简单的方法来做到这一点。 但是我设法通过创建一个基类像

[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; 
} 

解决问题而提出的其他蒙戈相关的类继承它作为

public class MongoObject : MongoBaseDocument 

这解决了这个问题,并允许在需要添加更多的功能。