使用 MongoDB C# 映射私有后备字段

9
我将尝试在MongoDB中映射私有的后台字段。 我的模型如下:
public class Competitor
{
    private IList<CompetitorBest> _competitorBests;

    public virtual int CompetitorId { get; set; }

    public virtual string Name
    {
        get
        {
            if (Type == "Team")
                return TeamName;

            return FirstName + " " + LastName;
        }
    }

    public virtual IEnumerable<CompetitorBest> CompetitorBests
    {
        get { return _competitorBests.ToArray(); }
    }
}

我基本上想将_competitorBests映射为CompetitorBests(在我的mongo文档中存在)。
注意:这个模型是由NHibernate共享的(因此是virtual)。我在文档中没有发现任何明显的东西。
我该如何做?
2个回答

16

这个方法解决了问题:

BsonClassMap.RegisterClassMap<Competitor>(cm =>
{
    cm.AutoMap();
    cm.MapField("_competitorBests").SetElementName("CompetitorBests");
});

遇到了相同的问题!谢谢! - lexeme
4
你能在.CompetitorBests属性上运行linq查询吗?对我来说它总是出错。 - Jereme
如果代码无法运行,请确保您的字段没有readonly修饰符。 - Rodion Mostovoi

1

上面的答案是有效的,但正如@jereme所提到的那样,如果您尝试在LINQ中使用它,它会失败。 为我添加私有setter起作用了,我甚至不必在RegisterClassMap中添加自定义映射。

public class Competitor
{
    private IList<CompetitorBest> _competitorBests;

    public virtual IEnumerable<CompetitorBest> CompetitorBests
    {
        get => _competitorBests.ToArray();
        private set => _competitorBests = value.ToList();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接