RavenDb和保护文档/实体中的集合

RavenDb和保护文档/实体中的集合,ravendb,Ravendb,嗨,我习惯于拥有以下实体 公共类Foo { 私人酒吧; 公共IEnumerable条{get{return bar;}} 公共空白添加(条形) { /*这里的验证逻辑*/ _条。添加(条); } } 我怀疑这对RavenDb不起作用还是我错了? 我可以保护我的收藏不受外界操纵吗(换句话说,不允许foo.bar.Add(bar);)我找到了使用两个属性的解决方案 公共IEnumerable条{get{return InnerBars;}} 私有列表InnerBars{get;set;} 我找

嗨,我习惯于拥有以下实体

公共类Foo
{
私人酒吧;
公共IEnumerable条{get{return bar;}}
公共空白添加(条形)
{
/*这里的验证逻辑*/
_条。添加(条);
} 
}
我怀疑这对RavenDb不起作用还是我错了?
我可以保护我的收藏不受外界操纵吗(换句话说,不允许foo.bar.Add(bar);)

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


公共IEnumerable条{get{return InnerBars;}}

私有列表InnerBars{get;set;}

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


公共IEnumerable条{get{return InnerBars;}}

私有列表InnerBars{get;set;}

自动属性上的私有setter是最简单、最可读的方法,无需做任何特殊操作

公共类Foo
{
公共IEnumerable条{get;private set;}
公共空白添加(条形)
{
条。添加(条);
}
}
另一种方法是使用属性:

//选择一个或另一个
在1.0上使用Newtonsoft.Json//
在2.0上使用Raven.Imports.Newtonsoft.Json//
...
公开课Foo
{
[JsonProperty(PropertyName=“bar”)]
私人酒吧;
[JsonIgnore]
公共IEnumerable条{get{return bar;}}
公共空白添加(条形)
{
_条。添加(条);
}
}

自动属性上的私有setter是最简单、可读性最强的方法,无需做任何特殊操作

公共类Foo
{
公共IEnumerable条{get;private set;}
公共空白添加(条形)
{
条。添加(条);
}
}
另一种方法是使用属性:

//选择一个或另一个
在1.0上使用Newtonsoft.Json//
在2.0上使用Raven.Imports.Newtonsoft.Json//
...
公开课Foo
{
[JsonProperty(PropertyName=“bar”)]
私人酒吧;
[JsonIgnore]
公共IEnumerable条{get{return bar;}}
公共空白添加(条形)
{
_条。添加(条);
}
}

First way在添加新条时错过了IList的丑陋转换。我喜欢第二个,但我不喜欢属性。这就是我期待参加会议的原因。:)第一种方法在添加新条时忽略了IList的丑陋角色。我喜欢第二个,但我不喜欢属性。这就是我期待参加会议的原因。:)Yeap但json包含InnerBars而不是Bars,这可能会引起轻微的混淆,特别是当使用者(其他开发人员)看不到实现时。Yeap但json包含InnerBars而不是Bars,这可能会引起轻微的混淆,特别是当使用者(其他开发人员)看不到实现时。
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);
    } 
}