我正在寻找一种使用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; }
}
Mapper类
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"
}
}
]
}
答案 0 :(得分:1)
如果要为集合的主_id
自动生成ObjectId,则必须使用属性标记Id属性:
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
但是,根据that answers,你应该考虑你的方法,因为集合中嵌套元素的自动生成的ID没有意义。
您需要拥有一个单独的Dejavu集合并从BigTree文档中引用它,或者手动生成ObjectIds。