C# MongoDB AutoGenerateId 不带属性

标签 c# mongodb mongodb-.net-driver

我有以下类(class):

public class Foo : IFoo
{
    public object Id { get; set; }
    public string someProperty { get; set;}
}

如果您注意到,Id 属性是一个对象类型。这非常重要,因为我不想对我的模型有任何 MongoDb 依赖,因此相同的模型将在其他数据库存储库中使用。

所以我有我的 FooMongoDBRepository ,其中定义了我的类映射:

    public class FooMongoDBRepository : IFooRepository{

        public MongoDbSubscriberRepository (MongoDatabase database){
            BsonSerializer.LookupSerializer(typeof(Foo));
            if (!BsonClassMap.IsClassMapRegistered (typeof(Foo))) {
                BsonClassMap.RegisterClassMap<Foo> (cm => {
                    cm.AutoMap ();
                    cm.SetIdMember (cm.GetMemberMap (c => c.Id));
                });
            }

        }
     }

这对于插入工作正常,但是当尝试更新插入时,我的 _id 键始终为 NULL。有人可以帮助我,如何在不使用注释的情况下强制生成 Id 字段?

提前致谢!

编辑:现在可以了!,这是代码

                cm.AutoMap ();
                cm.GetMemberMap(c => c.Id).SetIgnoreIfDefault(true);
                cm.SetIdMember (cm.GetMemberMap (c => c.Id));
                cm.IdMemberMap.SetIdGenerator(ObjectIdGenerator.Instance);

最佳答案

您需要添加

[BsonIgnoreIfDefault] 到您的Id

BsonClassMap.RegisterClassMap<MyClass>(cm => {
    cm.AutoMap();
    cm.GetMemberMap(c => c.SomeProperty)
        .SetDefaultValue("abc")
        .SetIgnoreIfDefault(true);
});

以上示例可以在 here 找到

关于C# MongoDB AutoGenerateId 不带属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22885250/

相关文章:

c# - MongoDB C# 驱动程序 : API vs Linq Performance

c# - 带有过滤器的 MongoDb FindAsync 游标总是返回 null

C# CefSharp 内存管理

C# 列表重复项

c# - 如果项目是由 SharpDevelop 生成的,则 OpenFileDialog 会被 Norton Antivirus 阻止

mongodb - 如何导入官方mongodb驱动包

c# - 创建用于字符串连接两个对象的表达式树

javascript - Joi 在验证 mongoose 对象时抛出错误 -

javascript - 从返回的 MongoDB 对象更新 Angular.js $scoped

mongodb - 如何在 MongoDB 中查询多个嵌套数据字段