我需要存储一个看起来像这样的类
public class Wsp{
//mapped
public ObjectId ObjId {get; set;} // not called Id
public Guid Id {get; set;}
public string Name {get; set;}
//NOT mapped
public string Size {get; set;}
public List<string> Sit {get; set;}
.....
}
BsonClassMap.RegisterClassMap<Wsp>(map =>
{
map.MapProperty(p => p.Name);
map.MapProperty(p => p.ID);
//what to do with ObjId ??
});
我想在mongoDb中只在Wsp Document中存储3个值。
ObjId -> primary key
Id
Name
当我从DB中选择对象时,我希望填充这些值。
另一个问题是,如果在另一个类中我可以使用Guid属性作为主键吗?性能是否会比使用ObjectID更差? mongo db可以生成Guid,还是我必须在插入之前提供唯一的guid?
答案 0 :(得分:2)
第一个问题,只需添加BsonId,如:
[BsonId]
public ObjectId ObjId {get; set;} // not called Id
表示此字段是主键,应映射到_id字段。
基本上你可以使用任何东西作为ID,没有限制你必须使用一些指定的类型。因此,只要它们是唯一的,您就可以使用int / GUID / string,任何东西。如果您希望ID不是ObjectId,则必须提供ID。实际上ObjectId是由驱动程序生成的,而不是由MongoDB生成的。
编辑:当您使用BsonClassMap
时,请尝试以下
BsonClassMap.RegisterClassMap<Wsp>(map =>
{
map.AutoMap();
map.MapProperty(p => p.Name);
map.MapProperty(p => p.ID);
});
document清楚地解释了这一点:
对于每个约定,都有一个默认约定,这是您最常使用的约定,但您可以根据需要覆盖各个约定(甚至可以编写自己的约定。)