是否有可能在不放弃不变性的情况下更新RavenDB中的F#实体?

时间:2013-09-29 20:33:58

标签: f# ravendb immutability

我已成为F#强大类型系统的忠实粉丝,以及它如何让你在你的领域模型上创建一些非常严格的限制(对于那些感兴趣的人,请参阅this)。我也成为了RavenDB的忠实粉丝,以及它在我遇到的大多数情况下如何使数据库工作变得非常简单。然而,似乎存在让两者很好地融合在一起的问题 - 至少如果你坚持使用不可变类型。

只要您不必更新实体,您需要做的就是使id属性可变。虽然我当然不满意这是必要的,但我可以忍受它。但是,似乎更改跟踪的处理方式是必须改变从数据库检索的原始对象,并且无法将新对象附加到数据库以表示现有实体的更新版本。似乎可以使用修补API执行我想要的操作,但documentation明确警告不要使用此类通用用法。

我是否错过了RavenDB API的一部分,它可以让我在没有太多大惊小怪的情况下做到这一点,或者我是否必须放弃不可变域模型的想法(或者可能为它做出功能请求)?

1 个答案:

答案 0 :(得分:4)

在这种情况下,不可变的问题是你 实际上正在处理可变数据。 该文件正在变异。你不在用户空间中改变它的事实在这里没什么问题。 你可以做的是打电话给Advanced.Evict& Store中的StoreUpdated或类似扩展方法的内容。但我会质疑使用不可变数据来表示可变状态。