哟 - 这本身不是 ravendb 问题 - 这是另一个设计问题 一般与文档数据库有关。
所以我一直在使用 DenormalizedReference,它已经 我突然想到,在很多地方这使得 DDD 变得相当困难。
所以,比如说我有一个具有子集合的对象:
List<DenormalizedReference<SomeType>>
该子集合是在实例化父集合时创建的
接受 List<SomeOtherType>
的重载构造函数
现在 - 在 ctor 中,我想从 SomeOtherType 创建此列表 正在传递集合 - 这意味着我需要创建一个新的 每个 SomeOtherType 的 SomeType。
没有将 DocumentSession 传递到我的域中 - 我不是 要做 - 这不会起作用,因为当保存父 AR 时,我们 丢失每个子对象的属性(Id 和 Name 除外)
其他人如何处理这个问题?
最佳答案
你不能这么做。 或者更确切地说,你不应该这样做。
有多种方法可以解决这个问题,通常使用静态网关来获取 session ,但问题是这种方法创建了一个延迟加载的集合,并存在所有问题。
RavenDB 是专门为避免此类问题而设计的。您可以包含项目以避免返回服务器,但您不应该尝试像这样透明地在 id 和类型之间移动。
关于design-patterns - 文档数据库 - 非规范化引用 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132290/