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

Ensuring Unique Email Address in Documents

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

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

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


编辑

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


编辑 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() returns true

RavenDB 具有独特的约束束的概念,可以为您完成所有这一切。

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