【问题标题】:MongoDb c# .net Save throwing duplicate key exceptionMongoDb c# .net Save 抛出重复键异常
【发布时间】: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。

标签: c# .net mongodb save


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多