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

时间:2013-08-26 08:44:02

标签: 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属性作为单个唯一约束与电子邮件约束并排(虽然它们不是id)。 有可能吗?

2 个答案:

答案 0 :(得分:1)

使用UniqueConstraints捆绑包:

public class Person
{
   public string Name {get;set;}
   [UniqueConstraint]
   public string Email {get;set;}
   public string GoogleId {get;set;}
   public string FacebookId {get;set;}
   [UniqueConstraint]
   public string GoogleAndFacebookIds { get;set; }
}

每次更新GoogleAndFacebookIdsGoogleId时,请确保更新FacebookId。我这么做了这么多,我最后在我的所有类上使用了一个简单的界面来做这种事情:

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

所以,

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;
    }
}

答案 1 :(得分:0)

你做不到。 Raven没有提供对财产实施独特限制的任何可能性。如果你想这样做,你需要单独的文件集(见下面的链接)

Unique constraints in Raven

更新

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

Bundle: Unique constraints