MongoDB c# driver _id field and SetIdMember()



我已经将类映射的SetIdMember()设置为指向对象中的一个元素:

BsonClassMap.RegisterClassMap<Person>(x =>
    {
        x.AutoMap();
        x.SetIdMember(x.GetMemberMap(p => p.PersistedId));
    });

这工作得很好,但是我正在寻找mongo数据(通过MongoVUE),并注意到persisteddid字段不存储在数据库的任何地方,我认为这是因为它映射到_id字段。

现在对于99%的场景,我确信这是好的,但是在这种情况下,我使用非强类型模型,并拉回原始BsonDocument,然后将其转换为JSON,以便交给客户端脚本,然后进一步使用。然而,它期望在JSON中获得一个persisteddid字段,但它不存在,它只是_id。

有办法让我做它的整个唯一的_id字段的东西,但也让它写出persiststedid字段到数据库了吗?(我知道这将是重复的数据,但这不是主要的担心)

您可以添加一个只读属性,并让驱动程序知道将其作为persisted存储在数据库中。

public class Entity
{
    public ObjectId Id { get; set; }
    public ObjectId PersistedId 
    {
        get { return Id; }
    }
}
BsonClassMap.RegisterClassMap<Person>(x =>
{
    x.AutoMap();
    x.MapMember(x => x.PersistedId);
});

然而,我不确定这是最好的主意。在这样的服务器环境中,您可能不应该与UI共享数据库模型。相反,您应该将数据库模型映射到UI模型。这提供了大量的好处,比如聚合模型、转换模型等等。这样你的UI就不会这么耦合了。

最新更新