覆盖MongoDb .NET CRUD方法
问题描述:
我想知道是否以及如何覆盖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;
}
我该如何实现?
答
前段时间我遇到了同样的问题。 虽然我也尝试覆盖原来的方法,但没有简单的方法来做到这一点。 但是我设法通过创建一个基类像
[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
这解决了这个问题,并允许在需要添加更多的功能。
在事件的构造函数中执行它,并继续使用标准mongo API调用 – BOR4
我想实现一些通用的东西。在一个真正的应用程序中,我可以从很多不同的地方创建大量文档。 – Misi