确保文档中的唯一电子邮件地址

时间:2015-04-15 11:06:09

标签: ravendb

我想创建或更新具有UserAccount属性的EmailAddress实体,同时确保EmailAddress是唯一的。 UserAccount拥有Id类型的long属性,这样我就可以跟踪每个UserAccount实体,因为使用电子邮件地址作为文档ID如果用户希望更改其电子邮件地址,则会出现问题。

我听说过我可以创建一个名为UniqueEmailAddresses的新集合,它可以是空(或接近空的?)文档的集合,电子邮件地址将是实际的文档ID。

这是对的吗?如果我在一次交易中更新两个集合,这是确保具有相同电子邮件地址的2个文档最终未在UserAccount集合中结束的最佳方法吗?是否使用用户的电子邮件地址添加此额外集合作为ID,在处理数百万用户时会导致任何性能问题?是否可以创建一个空文档?我走的是正确的道路吗?


修改

这些是可用的捆绑包,我需要添加哪个捆绑包才能获得唯一的约束功能?

enter image description here


编辑2

我已将Raven.Bundles.UniqueConstraints DLL添加到文件夹~/App_Data/RavenDB/Plugins(我使用嵌入式服务器)并将我的文档存储提供程序更改为:

protected override IDocumentStore CreateInstance(IContext context)
{
    EmbeddableDocumentStore documentStore = new EmbeddableDocumentStore()
    {
        DataDirectory = @"~\App_Data\RavenDB",
        UseEmbeddedHttpServer = true,
        Configuration = { Port = 8181, PluginsDirectory = @"~\App_Data\RavenDB\Plugins" }
    };

    documentStore.RegisterListener(new UniqueConstraintsStoreListener());

    documentStore.Initialize();

    return documentStore;
}

但是,当我通过违反约束进行测试时,它仍然没有显示在可用的捆绑列表中,并且我对checkResult.ConstraintsAreFree()的调用错误地返回true

1 个答案:

答案 0 :(得分:1)

RavenDB具有独特约束包的概念,可以为您完成所有这些操作。

查看文档: http://ravendb.net/docs/article-page/3.0/csharp/client-api/bundles/how-to-work-with-unique-constraints-bundle