0

我不明白为什么我在保存时收到重复键异常。我认为保存的目的是如果存在则更新,如果不存在则插入。这是错误。

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

这就是我所说的保存...

_collection.Save(baseVariableGroup)

例外...

在此处输入图像描述

4

1 回答 1

1

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

于 2013-10-29T20:37:08.147 回答