使用 BsonClassMap 时获取 MongoDB 中插入文档的 _id?
Get _id of an inserted document in MongoDB when using BsonClassMap?
在任何人将此问题标记为 Get _id of an inserted document in MongoDB? 的重复之前,请阅读整个问题。
我正在开发带有 MongoDB 驱动程序的 ASP.NET 核心 API 应用程序。
我面临的问题是,在数据库中插入文档后,Post
class 的 Id
属性 未分配MongoDB.
生成的id
我发现他们使用 class 中的 annotations/attributes 解决了一些问题,但是,我正在开发一种模式,其中域 classes 没有任何持久性知识。
我创建了没有注释的实体 class:
public class Post
{
public string Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
}
并使用 BsonClassMap
定义映射:
BsonClassMap.RegisterClassMap<Domain.Entities.Post>(x =>
{
x.AutoMap();
x.MapIdField(x => x.Id)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
代码如下:
public async Task Create(Domain.Entities.Post entity, CancellationToken cancellationToken)
{
async Task Create()
{
await Post.InsertOneAsync(entity);
}
await Create();
var e = entity;
}
当我检查实体时,Id 属性 为空。
那么,在使用 BsonClassMap
时如何获取 ID?
目前,您的代码知道如何读取来自数据库的 ObjectId
ID,但在客户端生成 ID 时仍需要帮助,
缺少的部分是SetIdGenerator
方法调用,试试:
BsonClassMap.RegisterClassMap<Post>(x =>
{
x.AutoMap();
x.MapIdField(x => x.Id)
.SetIdGenerator(StringObjectIdGenerator.Instance)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
现在将在客户端生成 ObjectId 并将其转换为字符串,因此当您将鼠标悬停在 e
变量上时应该能够看到它们。
详情here.
在任何人将此问题标记为 Get _id of an inserted document in MongoDB? 的重复之前,请阅读整个问题。
我正在开发带有 MongoDB 驱动程序的 ASP.NET 核心 API 应用程序。
我面临的问题是,在数据库中插入文档后,Post
class 的 Id
属性 未分配MongoDB.
我发现他们使用 class 中的 annotations/attributes 解决了一些问题,但是,我正在开发一种模式,其中域 classes 没有任何持久性知识。
我创建了没有注释的实体 class:
public class Post
{
public string Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
}
并使用 BsonClassMap
定义映射:
BsonClassMap.RegisterClassMap<Domain.Entities.Post>(x =>
{
x.AutoMap();
x.MapIdField(x => x.Id)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
代码如下:
public async Task Create(Domain.Entities.Post entity, CancellationToken cancellationToken)
{
async Task Create()
{
await Post.InsertOneAsync(entity);
}
await Create();
var e = entity;
}
当我检查实体时,Id 属性 为空。
那么,在使用 BsonClassMap
时如何获取 ID?
目前,您的代码知道如何读取来自数据库的 ObjectId
ID,但在客户端生成 ID 时仍需要帮助,
缺少的部分是SetIdGenerator
方法调用,试试:
BsonClassMap.RegisterClassMap<Post>(x =>
{
x.AutoMap();
x.MapIdField(x => x.Id)
.SetIdGenerator(StringObjectIdGenerator.Instance)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
现在将在客户端生成 ObjectId 并将其转换为字符串,因此当您将鼠标悬停在 e
变量上时应该能够看到它们。
详情here.