MongoDB C#如何为元素中的嵌套元素生成对象ID

本文关键字:元素 嵌套 ID 对象 MongoDB | 更新日期: 2023-09-27 18:20:31

我正在寻找一种使用MongoDB c#驱动程序为嵌套内部属性生成ObjectId的方法。不幸的是,它不会为内部集合生成id。我正在寻找一种自动生成Id 的方法

实体类

public class BigTree : IEntity
{
    public string Id { get; set; }
    public string ProjectId { get; set; }
    public string Name { get; set; }
    public string Revision { get; set; }
    public ICollection<Dejavu> Dejavu { get; set; }
}
public interface IEntity
{
    string Id { get; set; }
}
public class Dejavu : IEntity
{
    public Dejavu()
    {
        Delgo = new Delgo();
    }
    public string Id { get; set; }
    public string FieldName { get; set; }
    public Delgo Delgo { get; set; }
}

映射器类

public static void MapAllTheClasses ()
{
    MapEntity<BigTree>();
    MapEntity<Delgo>();
    MapEntity<Dejavu>();     
}
public static void MapEntity<TEntity>() where TEntity : IEntity
{
    BsonClassMap.RegisterClassMap<TEntity>( e =>
     {
         e.AutoMap();
         e.MapIdProperty( u => u.Id )
                  .SetIdGenerator( StringObjectIdGenerator.Instance )
                  .SetSerializer( new StringSerializer( BsonType.ObjectId ) );
     } );
}

结果

{
    "_id": ObjectId('56386cc49aa56e25d46aa279'),
    "ProjectId": "56386fa24ff36e25d46aa276",
    "Name": "alpha",
    "Dejavu": [
        {
            "FieldName": "apple",
            "LK003": {
                "Qty": 1,
                "Content": "red"
            }
        }
    ]
}

MongoDB C#如何为元素中的嵌套元素生成对象ID

如果您想自动为集合的主_id生成ObjectId,您必须用属性标记Id属性:

[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

然而,根据这个答案,您应该考虑您的方法,因为自动生成集合中嵌套元素的Id是没有意义的。

您需要有一个单独的Dejavu集合并从BigTree文档中引用它,或者手动生成ObjectId。

相关文章: