我使用的是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版本。
答案 0 :(得分:1)
问题是捆绑包的指定名称不正确,因此它不会在服务器端处于活动状态。请在"Unique Constraints"
设置选项中使用"UniqueConstraints"
代替"Raven/ActiveBundles"
。