MongoDb c#.net保存抛出重复键异常

时间:2013-09-10 13:02:43

标签: c# .net mongodb save

我不明白为什么我在Save上遇到重复的密钥异常。我认为保存的重点是如果有更新,如果没有则插入。这是错误。

  

WriteConcern检测到错误'E11000重复键错误索引:cms.BaseVariables。$ id dup key:{:“8f69cb40ab3568957c237ef360d29964”}'。 (响应是{“err”:“E11000重复键错误索引:cms.BaseVariables。$ id dup key:{:\”8f69cb40ab3568957c237ef360d29964 \“}”,“code”: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)

例外......

enter image description here

1 个答案:

答案 0 :(得分:1)

我不相信这是保存的正常行为,我很确定你是用你如何生成id来引出它的(我认为驱动程序认为Id每次都会改变)。我确信会有一个更快乐的路径可以避免这个问题:创建一个POCO来分组你的“复合id”成员public class BaseVariableGroup { public CompoundId Id { get; set: } }。您不再需要触摸班级地图。