【发布时间】:2013-03-11 08:49:31
【问题描述】:
我已经为域建模了几天,根本没有考虑持久性,而是专注于域逻辑。现在我准备好持久化我的域对象,其中一些包含 IEnumerable 的子实体。使用 RavenDb,持久性很“容易”,但是当再次加载我的对象时,所有 IEnumerables 都是空的。
我意识到这是因为他们根本没有任何属性设置器,而是使用列表作为支持字段。域聚合根的用户可以通过公共方法而不是直接在集合上添加子实体。
private readonly List<VeryImportantPart> _veryImportantParts;
public IEnumerable<VeryImportantPart> VeryImportantParts { get { return _veryImportantParts; } }
还有添加的方法,没什么花哨的……
public void AddVeryImportantPart(VeryImportantPart part)
{
// some logic...
_veryImportantParts.Add(part);
}
我可以通过在所有带有支持字段的 IEnumerables 上添加一个私有/受保护的设置器来解决此问题,但它看起来......嗯......不是超级性感。
private List<VeryImportantPart> _veryImportantParts;
public IEnumerable<VeryImportantPart> VeryImportantParts
{
get { return _veryImportantParts; }
protected set { _veryImportantParts = value.ToList(); }
}
现在 RavenDb json 序列化程序将在加载时再次填充我的对象,但我很好奇是否有更简洁的方法来执行此操作?
我一直在摆弄 JsonContractResolver 但还没有找到解决方案...
【问题讨论】:
标签: ravendb