2015-06-12 19 views
4

我正在使用C#驅動程序2.0。我有一個POCO,我在蒙戈我儲存,看起來像這樣:如何在不指定使用C#驅動程序的過濾器的情況下替換mongodb中的對象?

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

你需要一個過濾器的ID。否則,您將更新所有文檔。 – i3arnon

+0

但是因爲我想創建一個通用的方法來爲我做更新,我不知道哪個字段是對象上的ID字段。 – BigJoe714

+1

您可以添加僅具有ID並接受該ID的接口。或者使用反射來查看什麼是BsonId。但是你需要一個Id作爲過濾器 – i3arnon

回答

6

我完全@ i3arnon同意,典型的解決方案是未來:

界面爲你的模型:在你的基地倉庫

public interface IEntity 
{ 
    string Id { get; set; } 
} 

保存方法

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)。

相關問題