C#MongoDB AutoGenerateId没有属性

时间:2014-04-05 18:49:42

标签: c# mongodb mongodb-.net-driver

我有以下课程:

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));
                });
            }

        }
     }

这适用于插入,但在尝试Upsert时,我的_id键始终为NULL。有人可以帮助我,如何在不使用注释的情况下强制生成Id字段?

先谢谢!

编辑:现在它正在运作!,这是代码

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

1 个答案:

答案 0 :(得分:3)

您需要添加

[BsonIgnoreIfDefault] ID

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

上面的示例可以找到here