0

我正在使用 RavenDb 服务器和客户端 3.5.0,我试图让 UniqueConstraint 工作但没有成功。

简单案例:

using Raven.Client.UniqueConstraints;
public class User {
    public string Id { get; set; }
    [UniqueConstraint]
    public string Email { get; set; }
}

文档说:

将 Raven.Bundles.UniqueContraints 程序集放到 Plugins 目录中。

我是通过 NuGet 完成的:Install-Package RavenDB.Bundles.UniqueConstraints -Version 3.5.0 然后将二进制 Raven.Bundles.UniqueConstraints.dll 粘贴到我在 Raven 根目录中创建的文件夹 Plugins 中。

保存用户文档后,我在元数据中得到了这个:

"Ensure-Unique-Constraints": [
        {
            "Name": "Email",
            "CaseInsensitive": false
        }
    ]

一切似乎都有效,但我仍然使用相同的电子邮件保存文档。

UniqueConstraintCheckResult<User> checkResult = session.CheckForUniqueConstraints(user);

                    // returns whether its constraints are available
                    if (checkResult.ConstraintsAreFree())
                    {
                        session.Store(user);
                        session.SaveChanges();
                    }

我检查了这个链接RavenDB UniqueConstraint 似乎不起作用,这个https://groups.google.com/forum/#!searchin/ravendb/unique|sort:relevance/ravendb/KzO-eIf9vV0/NJyJ4DNniFUJ和许多其他的人们有同样的问题没有解决方案。在某些情况下,他们说正在检查该属性是否已作为解决方案手动存在于数据库中。

该文件还说:

要在服务器范围内激活唯一约束,只需将唯一约束添加到全局配置文件中的 Raven/ActiveBundles 配置中,或者使用 API 或 Studio 设置一个新的数据库并打开唯一约束包

但不知道该怎么做。我做了一些搜索并找到了一个可能的方法:在 Studio 中,选择数据库,转到设置 -> 数据库设置,我找到了这个配置:

{
    "Id": "TestRaven",
    "Settings": {
        "Raven/DataDir": "~\\TestRaven"
    },
    "SecuredSettings": {},
    "Disabled": false
}

我尝试添加此配置:

"Settings": {
        "Raven/DataDir": "~\\TestRaven",
        "Raven/ActiveBundles": "UniqueConstraints"
}

然后在尝试保存时出现错误。错误消息说“数据库已创建,无法修改或添加捆绑包”,并建议添加此行"Raven-Temp-Allow-Bundles-Change": true,我能够使用 UniqueConstraint 捆绑包配置保存 de 设置。

到目前为止,我认为我完成了文档描述的所有要求。最后一个是:

任何未添加到 ActiveBundles 列表中的包都不会处于活动状态,即使相关程序集位于 Plugins 目录中也是如此。

我发现捆绑列表的唯一地方是在 Studio 中创建一个新数据库,但该列表不可编辑,只是有关已启用内容的信息。

文档说了很多要求,但只是不告诉我们如何去做,超级聪明,我们必须尝试 gess 如何。到目前为止我可以到达这里,但你猜怎么着?它仍然无法正常工作!

我的问题是,UniqueConstraints 真的可以在 RavenDb 中使用吗?有人让这个工作吗?

如果是,云请告诉我如何?

先感谢您!

[编辑]我忘了提到我添加了以下行:

store.Listeners.RegisterListener(new UniqueConstraintsStoreListener());

并且还尝试了 3.5.1 版本。

4

1 回答 1

1

问题是捆绑包的指定名称不正确,因此它不会在服务器端处于活动状态。请在设置选项中使用"Unique Constraints"而不是。"UniqueConstraints""Raven/ActiveBundles"

于 2016-11-30T10:55:53.813 回答