MongoDB c#driver _id字段和SetIdMember()

时间:2012-12-21 19:34:46

标签: c# mongodb mongodb-.net-driver uniqueidentifier

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

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

哪个工作正常,但是我在查看mongo数据(通过MongoVUE)并注意到PersistedId字段没有存储在数据库的任何地方,我认为这是因为它将它映射到_id字段。

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

那么有没有办法让它来完成它的整个唯一的_id字段事情,还能让它将PersistedId字段写出来到数据库中吗? (我知道它将是重复的数据,但它不是一个主要的担心)

1 个答案:

答案 0 :(得分:1)

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

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就不会与UI结合。但是,最终,这是你的呼唤。