我有以下类(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/