web-dev-qa-db-fra.com

Est-il possible de définir une contrainte unique en utilisant Entity Framework Code First?

Je souhaite appliquer la contrainte Unique dans une table et j'utilise Entity Framework Code-First.

Est-il possible d'ajouter une contrainte unique en utilisant EF 6, car je crois que dans les versions antérieures, ce n'était pas possible.

37
subi_speedrunner

Il semble que la fonction de contrainte unique qui devait sortir avec la version 6 soit passée à 6.1.

Avec EF 6.1, vous pouvez définir une contrainte à l'aide de l'attribut Index comme indiqué ci-dessous:

[Index("IX_FirstAndSecond", 1, IsUnique = true)]
public int FirstColumn { get; set; }

[Index("IX_FirstAndSecond", 2, IsUnique = true)]
public int SecondColumn { get; set; }

OR

Vous pouvez utiliser l'API Fluent comme indiqué ici dans MSDN

51
SBirthare

Disons que vous voulez ajouter la contrainte Unique sur un seul attribut , vous pouvez faire comme suit, à partir d'EF6.1

[Index(IsUnique = true)]
public string Username { get; set; }

Si vous avez plusieurs champs liés au même index, vous allez utiliser:

Index à plusieurs colonnes

Les index qui s'étendent sur plusieurs colonnes sont spécifiés en utilisant le même nom dans plusieurs annotations d'index pour une table donnée. Lorsque vous créez des index multi-colonnes, vous devez spécifier un ordre pour les colonnes de l'index. Par exemple, le code suivant crée un index multi-colonnes sur Rating et BlogId appelé IX_BlogAndRating. BlogId est la première colonne de l'index et Rating est la deuxième.

public class Post 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 
    [Index("IX_BlogIdAndRating", 2)] 
    public int Rating { get; set; } 
    [Index("IX_BlogIdAndRating", 1)] 
    public int BlogId { get; set; } 
}

Veuillez vous référer à ce lien pour plus d'informations.

21
Hassen Ch.