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"
}
}
]
}
如果您想自动为集合的主_id
生成ObjectId,您必须用属性标记Id属性:
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
然而,根据这个答案,您应该考虑您的方法,因为自动生成集合中嵌套元素的Id是没有意义的。
您需要有一个单独的Dejavu集合并从BigTree文档中引用它,或者手动生成ObjectId。