1

嗨我习惯了以下实体

public class Foo
{
    private IList<Bar> _bars;

    public IEnumerable<Bar> Bars { get { return bars; } }

    public void Add(Bar bar)
    {
        /* Validation logic here */

        _bars.Add(bar);
    } 
}

我怀疑这不适用于 RavenDb 还是我错了?我可以用 Bars 保护我的收藏免受外部操纵吗(换句话说,不允许 foo.Bars.Add(bar);)

4

2 回答 2

1

我找到了使用两个属性的解决方案。

public IEnumerable Bars { get { return InnerBars; } }

private List InnerBars { get; set; }}

于 2013-01-04T12:29:20.897 回答
0

自动属性上的私有 setter 是最简单和最易读的方法,无需做任何特别的事情。

public class Foo
{
    public IEnumerable<Bar> Bars { get; private set; }

    public void Add(Bar bar)
    {
        Bars.Add(bar);
    }
}

另一种方法是使用属性:

// pick one or the other
using Newtonsoft.Json // on 1.0
using Raven.Imports.Newtonsoft.Json // on 2.0

...

public class Foo
{
    [JsonProperty(PropertyName = "Bars")]
    private IList<Bar> _bars;

    [JsonIgnore]
    public IEnumerable<Bar> Bars { get { return bars; } }

    public void Add(Bar bar)
    {
        _bars.Add(bar);
    }
}
于 2013-01-04T19:27:07.467 回答