我有以下课程:
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);
答案 0 :(得分:3)
您需要添加
[BsonIgnoreIfDefault]
到 ID
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.SomeProperty)
.SetDefaultValue("abc")
.SetIgnoreIfDefault(true);
});
上面的示例可以找到here