329 votes

Contraintes de clé unique pour plusieurs colonnes dans Entity Framework

J'utilise Entity Framework 5.0 Code First ;

public class Entity
 {
   [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public string EntityId { get; set;}
   public int FirstColumn  { get; set;}
   public int SecondColumn  { get; set;}
 }

Je veux faire la combinaison entre FirstColumn y SecondColumn comme unique.

Exemple :

Id  FirstColumn  SecondColumn 
1       1              1       = OK
2       2              1       = OK
3       3              3       = OK
5       3              1       = THIS OK 
4       3              3       = GRRRRR! HERE ERROR

Existe-t-il un moyen de le faire ?

4voto

akokani Points 760

Vous devez placer l'attribut Index au-dessus des classes d'entités et définir vos clés multiples dans string[].

[Index("FirstColumn", "SecondColumn", IsUnique = true, Name = "My_Unique_Index")]
public class Entity    

 {
   [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public string EntityId { get; set;}
   public int FirstColumn  { get; set;}
   public int SecondColumn  { get; set;}
 }

3voto

Shoeb Hasan Points 31

J'ai récemment ajouté une clé composite avec l'unicité de 2 colonnes en utilisant l'approche recommandée par 'chuck', merci @chuck. Seule cette approche m'a semblé plus propre :

public int groupId {get; set;}

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X