我正在尝试在 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
)我该怎么做?
这成功了:
BsonClassMap.RegisterClassMap<Competitor>(cm =>
{
cm.AutoMap();
cm.MapField("_competitorBests").SetElementName("CompetitorBests");
});
上面的答案有效,但正如 @jeremy 提到的,如果您尝试将它与 LINQ 一起使用,它就会爆炸。 添加私有 setter 对我有用,我什至不必在 RegisterClassMap 中添加自定义映射。
public class Competitor
{
private IList<CompetitorBest> _competitorBests;
public virtual IEnumerable<CompetitorBest> CompetitorBests
{
get => _competitorBests.ToArray();
private set => _competitorBests = value.ToList();
}
}