我想创建或更新具有UserAccount
属性的EmailAddress
实体,同时确保EmailAddress
是唯一的。 UserAccount
拥有Id
类型的long
属性,这样我就可以跟踪每个UserAccount
实体,因为使用电子邮件地址作为文档ID如果用户希望更改其电子邮件地址,则会出现问题。
我听说过我可以创建一个名为UniqueEmailAddresses
的新集合,它可以是空(或接近空的?)文档的集合,电子邮件地址将是实际的文档ID。
这是对的吗?如果我在一次交易中更新两个集合,这是确保具有相同电子邮件地址的2个文档最终未在UserAccount
集合中结束的最佳方法吗?是否使用用户的电子邮件地址添加此额外集合作为ID,在处理数百万用户时会导致任何性能问题?是否可以创建一个空文档?我走的是正确的道路吗?
这些是可用的捆绑包,我需要添加哪个捆绑包才能获得唯一的约束功能?
我已将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
。
答案 0 :(得分:1)
RavenDB具有独特约束包的概念,可以为您完成所有这些操作。