覆盖MongoDb .NET CRUD方法

时间:2017-09-04 13:32:03

标签: c# .net mongodb override mongodb-.net-driver

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

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

我该如何实现?

1 个答案:

答案 0 :(得分: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;
}

并使其他mongo相关类继承为

public class MongoObject : MongoBaseDocument

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