在RavenDB中获取或创建,还是更好的选择?

在RavenDB中获取或创建,还是更好的选择?,ravendb,Ravendb,我刚刚开始在个人项目中使用RavenDB,到目前为止,插入、更新和查询都非常容易实现。然而,我遇到了一种情况,我需要一个GetOrCreate方法,我想知道实现这一点的最佳方法是什么 具体地说,我正在与OpenID集成,一旦进行了身份验证,用户就会被重定向到我的站点。此时,我想从Raven检索他们的用户记录(通过查询ClaimsIdentifier属性),或者创建一个新记录。用户ID当前由Raven设置 显然,我可以在两个语句中编写它,但是如果没有围绕select和create的某种事务,我可能

我刚刚开始在个人项目中使用RavenDB,到目前为止,插入、更新和查询都非常容易实现。然而,我遇到了一种情况,我需要一个GetOrCreate方法,我想知道实现这一点的最佳方法是什么

具体地说,我正在与OpenID集成,一旦进行了身份验证,用户就会被重定向到我的站点。此时,我想从Raven检索他们的用户记录(通过查询ClaimsIdentifier属性),或者创建一个新记录。用户ID当前由Raven设置

显然,我可以在两个语句中编写它,但是如果没有围绕select和create的某种事务,我可能最终会在数据库中得到两个具有相同声明标识符的用户记录

有没有办法实现这种功能?可能更重要的是你是否认为我走错了路。我假设即使我可以创建一个事务,它也会使扩展到多个服务器变得困难,并且在任何情况下都会增加性能瓶颈

更好的方法是将查询和创建操作作为单独的语句,并在检索用户并在此时合并时检查重复项。或者做类似的事情,但在一个预定的任务

我忍不住觉得我在这里遗漏了一些明显的东西,所以任何关于这个问题的建议都将不胜感激


注意:对于一个个人项目来说,扩展到多个服务器似乎是不必要的,但在将其用于工作之前,我将其用作对Raven的评估。

Dan,尽管RavenDB支持事务,但在您的情况下,我不会这样做。相反,您可以只使用users ClaimsIdentifier作为用户文档id,因为它们被授予唯一性


或者,您也可以继续使用Raven(HiLo btw)生成的用户ID,并使用新的UniqueConstraintsBundle,它允许您将某些属性赋予唯一性。在内部,它将创建一个附加文档,该文档的id为您的唯一属性的值。

谢谢Daniel,UniqueConstraintBundle看起来很有趣,一旦它被引入到主项目中,我肯定会尝试使用它。我想你是对的,在这个罐子里,我可以把原告的身份证做出来。干杯