我在使用官方C#驅動程序插入mongo db時遇到問題。插入Mongo DB和Id問題
public abstract class AggregateRoot
{
/// <summary>
/// All mongoDb documents must have an id, we specify it here
/// </summary>
protected AggregateRoot()
{
Id = ObjectId.GenerateNewId();
}
[BsonId]
public ObjectId Id { get; set; }
}
我的實體已經有了ID-S,但我不得不爲它創建工作蒙戈特定ID,作爲一個集合中的所有文件應該有一個。現在,然後我收到一個新的實體,在我的系統中生成了一個新的Mongo Id,並且我得到了mongo不能更改_id文檔舊異常的。有一些解決方法嗎?
讓我來描述一下設計。所有將作爲文檔存儲的實體 都從AggregateRoot繼承,該AggregateRoot在其中生成了ID號 。每個子文檔的ID都自動生成了 ,我對此沒有任何問題。引入AggregateRoot 中的id是爲了解決從 MongoCollection到List中的數據檢索時出現的問題,並引入了生成,因此id-s 與此不同。現在我們可以移動該id代以保存方法 ,因爲用於更新的新實體具有新的id代。但它意味着團隊中的每個開發人員都不能忘記在存儲庫中生成id-s ,這是有風險的。這將是更好的只是忽略ID 比蒙戈映射,如果有可能,而不是有 AggregateRoot類在所有
你是如何保存你的對象? BsonId屬性應該強制MongoDB使用該字段作爲你的id。 –
這個想法是,數據來自外部系統的存儲。它有自己的ID,我必須存儲。爲了兼容Mongo,這是一個僞造的ID。每個文檔都從AggregateRoot繼承,所以這個東西是在接收每個對象時生成的。很明顯,我可能會收到相同的數據,但生成的mongo id不同。所以例外出現 –