2011-02-09 1 views

Répondre

109

Vous pouvez spécifier l'ordre des colonnes dans les attributs, par exemple:

public class MyEntity 
{ 
    [Key, Column(Order=0)] 
    public int MyFirstKeyProperty { get; set; } 

    [Key, Column(Order=1)] 
    public int MySecondKeyProperty { get; set; } 

    [Key, Column(Order=2)] 
    public string MyThirdKeyProperty { get; set; } 

    // other properties 
} 

Si vous utilisez la méthode Find d'un DbSet vous devez prendre cet ordre pour les paramètres clés en compte.

38

Pour compléter la réponse présentée par Slauma, vous pouvez utiliser la Haskey méthode pour spécifier un ordre pour les clés primaires composites ainsi:

public class User 
{   
    public int UserId { get; set; }  
    public string Username { get; set; }   
}   

public class Ctp5Context : DbContext 
{ 
    public DbSet<User> Users { get; set; }   

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().HasKey(u => new 
     { 
      u.UserId, 
      u.Username 
     }); 
    } 
} 
+2

Merci - les deux méthodes ne fonctionnent bien. Je préfère les attributs parce que je génère mes classes à partir du code, et les attributs sont beaucoup plus concis. – GilShalit

+0

Personnellement, j'ajoute également Propety (x ...). HasColumnOrder (0 ... n) à chacune des propriétés de clé. Est-ce bon, mauvais, indifférent? – Suamere

5

Si, comme moi, vous préférez utiliser une configuration fichier, vous pouvez le faire de cette façon (basée sur l'exemple de Manavi):

public class User 
{ 
    public int UserId { get; set; } 
    public string Username { get; set; } 
} 

public class UserConfiguration : EntityTypeConfiguration<User> 
{ 
    public UserConfiguration() 
    { 
     ToTable("Users"); 
     HasKey(x => new {x.UserId, x.Username}); 
    } 
} 

il est évident que vous devez ajouter le fichier de configuration à votre contexte:

public class Ctp5Context : DbContext 
{ 
    public DbSet<User> Users { get; set; }   

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new UserConfiguration()); 
    } 
} 
0

Utilisation comme un objet anonyme:

modelBuilder.Entity<UserExamAttemptQuestion>().ToTable("Users").HasKey(o => new { o.UserId, o.Username }); 
Questions connexes