RavenDb UniqueConstraint不起作用

时间:2016-11-29 13:47:26

标签: ravendb ravendb-studio

我使用的是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; }
}

文档说:

  

删除插件中的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配置的约束   配置文件,或使用唯一设置新数据库   使用API​​或Studio

打开约束包

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

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

我尝试添加此配置:

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

然后在尝试保存时出现错误。消息错误提示类似于&#34;数据库已经创建并且无法修改或添加包&#34;并使用sugest来添加此行"Raven-Temp-Allow-Bundles-Change": true,我能够使用UniqueConstraint包配置保存设置。

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

  

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

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

文档说明了许多要求,但只是不告诉我们如何做到这一点,超级聪明,我们必须尝试gess如何。到目前为止我可以到这里,但是gess是什么?它还没有用!

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

如果是,云请告诉我怎么做?

提前谢谢!

将帖子 我忘了提到我添加了以下行:

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

并尝试使用3.5.1版本。

1 个答案:

答案 0 :(得分:1)

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