我正在使用C#驱动程序2.0。我有一个POCO,我存储在mongo中,看起来像这样:
public class TestObject
{
[BsonId]
public Guid Id { get; set; }
public string Property1 { get; set; }
}
我使用如下通用方法存储对象:
public async void Insert<T>(T item)
{
var collection = GetCollection<T>();
await collection.InsertOneAsync(item);
}
我想有一个类似的方法来更新对象。但是,ReplaceOneAsync
方法需要指定过滤器。
我想根据[BsonId]
属性来更新同一个对象。任何人都知道这是否可能?
答案 0 :(得分:6)
我完全赞同@ i3arnon,下一步是典型的解决方案:
模型的界面:
public interface IEntity
{
string Id { get; set; }
}
基础存储库中的save方法
public async Task SaveAsyn<T>(T entity) where T : IEntity
{
var collection = GetCollection<T>();
if (entity.Id == null)
{
await collection.InsertOneAsync(entity);
}
else
{
await collection.ReplaceOneAsync(x => x.Id == entity.Id, entity);
}
}
关于ID,您可以继续使用ID作为Guid,但更强大,更简单的解决方案是使用字符串(explanation about Id)。