MongoDb c# .net Save 抛出重复键异常
Posted
技术标签:
【中文标题】MongoDb c# .net Save 抛出重复键异常【英文标题】:MongoDb c# .net Save throwing duplicate key exception 【发布时间】:2013-09-14 05:02:55 【问题描述】:我不明白为什么我在保存时收到重复键异常。我认为保存的目的是如果有就更新,如果没有就插入。这是错误。
WriteConcern 检测到错误“E11000 重复键错误索引:cms.BaseVariables.$id dup key: : "8f69cb40ab3568957c237ef360d29964" ”。 (响应为 “err”:“E11000 重复键错误索引:cms.BaseVariables.$id dup key::\“8f69cb40ab3568957c237ef360d29964\””,“代码”:11000,“n” : 0, "connectionId" : 6969, "ok" : 1.0 )。
是的,没错,8f69cb40ab3568957c237ef360d29964 已经存在。那么为什么不只是更新呢?
我在对象上有以下类映射注册和 ID 属性...
BsonClassMap.RegisterClassMap<BaseVariableGroup>(cm =>
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(c => c.Id));
cm.IdMemberMap.SetIdGenerator(StringObjectIdGenerator.Instance);
);
public string Id
get return _id;
set
_id = value;
_id = Md5Cryptography.Hash(string.Concat(SportId, CompetitionId, Round));
这就是我如何调用 Save...
_collection.Save(baseVariableGroup)
例外...
【问题讨论】:
这看起来像 C# 但这是什么语言? 我已经更新了。你是对的。 我无法重现该问题。您使用的是哪个版本的驱动程序和哪个数据库版本? 其实我不确定这是否只是打开公共语言运行时异常时的正常行为...... DB版本2.2.3和驱动程序版本1.7.0.4714。 【参考方案1】:我不认为这是保存的正常行为,而且我很确定您是通过生成 id 的方式来引出它的(我认为驱动程序认为每次都会更改 Id)。有一条更快乐的路径,我确信可以避免这个问题:创建一个 POCO 来对您的“复合 id”成员public class BaseVariableGroup public CompoundId Id get; set:
进行分组。您不再需要触摸班级地图。
【讨论】:
以上是关于MongoDb c# .net Save 抛出重复键异常的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose 在使用 .save() 方法更新文档时抛出 E11000 重复键错误