我想知道是否以及如何覆盖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;
}
我该如何实现?
答案 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
这解决了问题,并允许在需要时添加更多功能。