首页 文章

RavenDb UniqueConstraint不起作用

提问于
浏览
0

我正在使用RavenDb Server和Client 3.5.0,我试图使UniqueConstraint工作没有成功 .

简单的案例:

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

文件说:

在Plugins目录中删除Raven.Bundles.UniqueContraints程序集 .

我是由NuGet做的: Install-Package RavenDB.Bundles.UniqueConstraints -Version 3.5.0 然后将二进制文件Raven.Bundles.UniqueConstraints.dll粘贴到我在Raven根目录下创建的文件夹插件中 .

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

"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 doesn't seem to work和这一个https://groups.google.com/forum/#!searchin/ravendb/unique|sort:relevance/ravendb/KzO-eIf9vV0/NJyJ4DNniFUJ和其他许多人没有解决方案有同样的问题 . 在某些情况下,他们说正在检查该属性是否已作为解决方案手动存在于数据库中 .

文件还说:

要在服务器范围内激活唯一约束,只需在全局配置文件中为Raven / ActiveBundles配置添加Unique Constraints,或者使用API或Studio启用唯一约束捆绑包来设置新数据库

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

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

我尝试添加此配置:

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

然后我在尝试保存时遇到错误 . 消息erros说"the database is already created and cant modify or add bundles"之类的东西,并添加此行 "Raven-Temp-Allow-Bundles-Change": true ,我能够使用UniqueConstraint捆绑配置保存de设置 .

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

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

我找到捆绑列表的唯一地方是在Studio中创建新数据库,但列表不可编辑,只是有关已启用的信息 .

文档说明了许多要求,但只是不告诉我们如何做到这一点,超级聪明,我们必须尝试gess如何 . 到目前为止我可以到这里,但是gess是什么?它仍然无法正常工作!

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

如果有, Cloud 请告诉我怎么样?

先感谢您!

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

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

并且还尝试使用3.5.1版 .

1 回答

  • 1

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

相关问题