MongoDB ID 在 InsertOneAsync 后保持为空
MongoDB id remains null after InsertOneAsync
我有一个基础 class 实体,它有一个字符串 Id 成员和一个派生的 class A.
但是当创建派生的新实例 class 并使用 InsertOneAsync 将其添加到我的集合中时,文档被添加到数据库中,Id 值为 null。
使用 ObjectId 作为 Id 似乎可行,但我正在努力防止 MongoDB 依赖我的模型。
我也尝试了下面的代码,但是结果是一样的:
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id).SetSerializer(new StringSerializer(BsonType.ObjectId));
});
您是否尝试不在模型中使用 ObjectID。 ID 不必是 objectID。您可以将字符串字段装饰为 ID。
我已将字符串 属性 与 [BsonId]
属性一起使用,没有任何问题。
我遇到了同样的问题,并最终使用这些属性让它工作(使用 2.0 驱动程序):
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
[BsonIgnoreIfDefault]
或等效的 BsonClassMap 流畅接口:
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
我尝试在打开 Upsert 的情况下使用 .ReplaceOneAsync 进行同样的工作,但这总是让 id 仍然为 null
我有一个基础 class 实体,它有一个字符串 Id 成员和一个派生的 class A.
但是当创建派生的新实例 class 并使用 InsertOneAsync 将其添加到我的集合中时,文档被添加到数据库中,Id 值为 null。
使用 ObjectId 作为 Id 似乎可行,但我正在努力防止 MongoDB 依赖我的模型。
我也尝试了下面的代码,但是结果是一样的:
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id).SetSerializer(new StringSerializer(BsonType.ObjectId));
});
您是否尝试不在模型中使用 ObjectID。 ID 不必是 objectID。您可以将字符串字段装饰为 ID。
我已将字符串 属性 与 [BsonId]
属性一起使用,没有任何问题。
我遇到了同样的问题,并最终使用这些属性让它工作(使用 2.0 驱动程序):
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
[BsonIgnoreIfDefault]
或等效的 BsonClassMap 流畅接口:
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
我尝试在打开 Upsert 的情况下使用 .ReplaceOneAsync 进行同样的工作,但这总是让 id 仍然为 null