确保文档中的唯一电子邮件地址
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 具有独特的约束束的概念,可以为您完成所有这一切。
我想用 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 具有独特的约束束的概念,可以为您完成所有这一切。