首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自POCO映射的.Net核MongoDB.Driver ObjectId零

来自POCO映射的.Net核MongoDB.Driver ObjectId零
EN

Stack Overflow用户
提问于 2022-09-16 01:31:01
回答 1查看 45关注 0票数 0

我正在使用ASP.net Core、MongoDB.Driver 2.13.0和一个具有以下结构的MongoDB文档:

代码语言:javascript
复制
 "lrec80" : [ 
    {
        "RR4NFAD" : {
            "$ref" : "RR4OCO",
            "$id" : ObjectId("00000000000000008c8a414b"),
            "$db" : "tpfdf"
        },
        "RR4NRCC" : 43,
        "RR4NAKY" : 0,
        "RR4NA80" : {
            "RR4NSDT" : { "$binary" : "UOE=", "$type" : "00" }
        },
        "RR4NPDT" : { "$binary" : "UOs=", "$type" : "00" },
        "RR4NTY1" : -124,
        "RR4NCTY" : "IAH",
        "RR4NLIA" : null,
        "RR4NNBR" : 1
    }, 

我的POCO对象几乎映射了我需要的所有字段,但"RR4NFAD“对象除外。

代码语言:javascript
复制
public class RR4NFAD
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public ObjectId Id { get; set; }

    [BsonElement("$ref")]
    public string Ref { get; set; }

    [BsonElement("$db")]
    public string DB { get; set; }
}

如果我将Id属性设置为ObjectId类型,则成功获得DBRef字段,但Id字段显示如下:

代码语言:javascript
复制
Id = {000000000000000000000000}
CreationTime = 1/1/1970 12:00:00 AM
Increment = 0
Machine = 0
Pid = 0
Timestamp = 0

如果我将Id字段设置为string:

代码语言:javascript
复制
   public class RR4NFAD
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }

    [BsonElement("$ref")]
    public string Ref { get; set; }

    [BsonElement("$db")]
    public string DB { get; set; }
}

Id作为空返回,但我仍然成功地获得了DBRef字段。

我尝试创建一个ObjectIdConverter,但没有成功,并使用以下示例将其作为Id字段的属性应用:

将ObjectID作为字符串从ASP.NET核心返回

如何将RR4NFAD Id字段作为查询另一个文档的引用作为以下内容之一返回?

  • ObjectId(“000000000000008c8a414b”)
  • "00000000000000008c8a414b“

谢谢你能提供的任何帮助。这似乎是一个简单的问题,但我对MongoDB并不熟悉,这给我带来了麻烦。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-16 02:28:11

问题与关注

科瓦克斯称,

如果没有显式分配.NET/C#驱动程序,则会自动添加_id成员。驱动程序自动将类的Id属性映射到数据库中的_id字段。如果需要的话,可以使用类映射属性或代码配置覆盖这一点。

这就是为什么您的IdRR4NFAD类中无法获得值,因为它正在被转换为_id而不是Id

溶液

实现类映射以覆盖成员的默认行为。

代码语言:javascript
复制
BsonClassMap.RegisterClassMap<RR4NFAD>(cm =>
{
    cm.AutoMap();
    cm.UnmapProperty(c => c.Id);
    cm.MapMember(c => c.Id)
        .SetElementName("$id");
});

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73738948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档