2013-08-26 3 views
1

Допустим, у меня есть класс:Несколько уникальных сдерживает на одном документе RavenDb

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 являлись единственным уникальным ограничением бок о бок с ограничением по электронной почте (в то время как non из них является идентификатором). Возможно ли это?

+0

Другими словами, никакие две записи не могут иметь одинаковые Эл. адрес. В двух записях может быть один и тот же GoogleId и FacebookId, но не такая же комбинация? –

+0

Да. Предположим, что эти два объекта будут нарушать единственное ограничение: новое лицо («Джон», «[email protected]», «googleId1», «facebookId1») новое лицо («Ави», «2 @ a.com "," googleId1 "," facebookId1 "); –

+0

Но установка уникального ограничения на все 3 не работает, потому что электронная почта сама по себе является уникальным элементом, не так ли? –

ответ

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

Вы не можете этого сделать. Raven не предоставляет никакой возможности для обеспечения уникальных ограничений на свойство. Если вы хотите сделать, что вам нужны отдельные наборы документов (ссылка ниже)

Unique constraints in Raven

Update:

кажется, что вы также можете попробовать использовать пакеты для реализации уникальных ограничений в объекте.

Bundle: Unique constraints

Смежные вопросы