2017-09-04 92 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 

這解決了這個問題,並允許在需要添加更多的功能。