2017-09-04 12 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; 
} 

のように、基本クラスを作成することで問題を解決するために管理し、他のMongoの関連クラスは、これが問題を解決し、必要に応じてより多くの機能を追加することができます

public class MongoObject : MongoBaseDocument 

としてそれを継承作らしかし、 。

関連する問題