0

我已将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 字段也写到数据库中?(我知道它会是重复的数据,但它不是一个大问题)

4

1 回答 1

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 如此耦合。但是,最终,这是你的决定。

于 2012-12-21T22:47:29.120 回答