私はmongodbのアップデートを一般化しようとしています。 EntityFrameworkを使用すると、これは変更トラッキングを持つので非常に簡単です。したがって、ビジネスロジックとデータベース固有の操作を分離できます。 MongoDbに関しては、ドキュメントの更新を行うためにこれらのUpdateDefinitionsを作成する必要があるので、簡単ではありません。C#Mongodbドライバ:アクションをUpdateDefinitionに変換する
これを模倣する簡単な方法はReplaceOneAsync
ですが、複数の当事者が同時に自分のコレクションに書き込むことができるので、これはオプションではありません。私は例えば、アプリケーション内でチャットシステムに使用しています。
public class MongoActionWrapper<TCollection>
{
public MongoActionWrapper(Action<TCollection> updateAction)
{
UpdateAction = updateAction;
}
public Action<TCollection> UpdateAction { get; }
}
をそして私は私のMongoRepositoryを持っている:私は代わりにUpdateDefinitionのコレクションでアクションを実行したいと思います
public abstract class BaseMongoRepository<TAggregate, TCollection> : IRepository<TAggregate> where TAggregate : BaseAggregateRoot, IMongoAggregate<TCollection>
{
private readonly IMongoCollection<TCollection> _mongoCollection;
protected BaseMongoRepository(IMongoCollection<TCollection> mongoCollection)
{
_mongoCollection = mongoCollection;
}
public async void SaveAsync(TAggregate aggregate)
{
var state = aggregate.GetState();
foreach (var action in state.ActionsToExecuteOnCollection)
{
await _mongoCollection.UpdateOneAsync<TCollection>(aggregate.GetSelector(), action.UpdateAction);
}
}
}
。または、何らかの形で私の行動をUpdateDefinitionに変換します。
これは、私がmongodbにとどまっていないように、リスト(またはデータを保存したい他のコレクション)に同じアップデートを適用できるようにします。
私の唯一の解決策は、私のUpdateAction
を更新を説明するオブジェクトのようにしてから、mongodbで永続化したいときにこれらのオブジェクトを翻訳することです。このようにして、それらをアクションに変換して、自分のコレクションや他のDBを選択することができます。
私はここでオプションが不足しているので、誰かがアイデアを持っていることを願っています。