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 では機能しないのではないかと疑っていますか、それとも間違っていますか? バーを外部操作から保護してコレクションを保持できますか (つまり、foo.Bars.Add(bar); を許可しない)

4

2 に答える 2

1

2 つのプロパティを使用するソリューションを見つけました。

public IEnumerable Bars { get { return InnerBars; } }

private List InnerBars { get; set; }}

于 2013-01-04T12:29:20.897 に答える
0

自動プロパティのプライベート セッターは、特別なことをしなくても、最も簡単で読みやすい方法です。

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 に答える