1

假设我有一堂课:

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)。是否可以?

4

2 回答 2

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

只要确保GoogleAndFacebookIds每次更新GoogleId或更新时都更新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;
    }
}
于 2014-01-30T21:29:47.530 回答
0

你不能这样做。Raven 不提供任何对属性强制执行唯一约束的可能性。如果你想这样做,你需要单独的文件集(见下面的链接)

Raven 中的独特约束

更新:

看来您也可以尝试使用捆绑包来实现对象中的唯一约束。

Bundle:唯一约束

于 2013-11-25T15:18:44.717 回答