RavenDb中单个文档的几个唯一约束

RavenDb中单个文档的几个唯一约束,ravendb,ravendb-studio,Ravendb,Ravendb Studio,假设我有一门课: public class Person { public string Name{get;set;} public string Email {get;set;} public string GoogleId {get;set;} public string FacebookId {get;set;} } 如果我想使电子邮件唯一,我将使用唯一约束捆绑包 但是我想将googleId和facebookId属性作为一个唯一的约束,与电子邮件约束并排设置(其中

假设我有一门课:

public class Person
{
   public string Name{get;set;}
   public string Email {get;set;}
   public string GoogleId {get;set;}
   public string FacebookId {get;set;}
}
如果我想使电子邮件唯一,我将使用唯一约束捆绑包

但是我想将googleId和facebookId属性作为一个唯一的约束,与电子邮件约束并排设置(其中没有一个是id)。
有可能吗?

你不能那样做。Raven不提供对属性强制实施唯一约束的任何可能性。如果您想这样做,您需要单独的文档集(请参阅下面的链接)

更新:

您似乎还可以尝试使用bundle在对象中实现唯一的约束


你不能那样做。Raven不提供对属性强制实施唯一约束的任何可能性。如果您想这样做,您需要单独的文档集(请参阅下面的链接)

更新:

您似乎还可以尝试使用bundle在对象中实现唯一的约束

使用捆绑包:

只要确保每次更新
GoogleId
FacebookId
时都更新
GoogleAndFaceBookID
。我做了这么多,结果在我所有的类上都使用了一个简单的接口来做这类事情:

public interface ICombinedConstraints
{
    string UniqueId { get; set; }
    void UpdateConstraints();
}
所以

使用捆绑包:

只要确保每次更新
GoogleId
FacebookId
时都更新
GoogleAndFaceBookID
。我做了这么多,结果在我所有的类上都使用了一个简单的接口来做这类事情:

public interface ICombinedConstraints
{
    string UniqueId { get; set; }
    void UpdateConstraints();
}
所以


换句话说,没有两个记录可以有相同的电子邮件。两个记录可以有相同的GoogleId和FacebookId,但不能有相同的组合?是的。假设这两个实体将违反唯一的约束:新人(“John”1@a.com“googleId1”、“facebookId1”)新人(“Avi”2@a.com“,”谷歌ID1“,”facebook ID1“);但对所有3个设置唯一约束是行不通的,因为电子邮件本身始终是唯一的项目,对吗?是的。电子邮件和其他两个属性都是唯一约束。我总共有两个唯一约束-一个在电子邮件上,另一个在googleId+facebookId上。主要问题是如何对googleId+f设置唯一约束acebookId?换句话说,没有两个记录可以有相同的电子邮件。两个记录可以有相同的GoogleId和FacebookId,但不能有相同的组合?是的。假设这两个实体将违反唯一约束:新人(“John”1@a.com“googleId1”、“facebookId1”)新人(“Avi”2@a.com“,”谷歌ID1“,”facebook ID1“;但是对所有三个设置一个唯一的约束是行不通的,因为电子邮件本身总是一个唯一的项目,对吗?是的。电子邮件和其他两个属性都是唯一的约束。总的来说,我有两个独特的限制——一个在电子邮件上,另一个在googleId+facebookId上。主要问题是如何对googleId+facebookId设置唯一约束?
public class Person : ICombinedConstraints
{
    public string Name{get;set;}
    [UniqueConstraint]
    public string Email {get;set;}
    public string GoogleId {get;set;}
    public string FacebookId {get;set;}
    [UniqueConstraint]
    public string UniqueId { get; set; }

    public void UpdateConstraints()
    {
        UniqueId = GoogleId + FacebookId;
    }
}