2011-02-09 21 views
62

İlk CTP5 varlık çerçeve koduyla kullanmak için bir POCO modeli oluşturuyorum. Bir PK sütununa özellik haritası yapmak için dekorasyonu kullanıyorum. Ancak bir PK'yi birden fazla sütunda nasıl tanımlayabilirim ve özellikle de dizindeki sütunların sırasını nasıl kontrol edebilirim? Sınıftaki özelliklerin sırasının bir sonucu mu?, Birden çok sütunda KeyAttribute nasıl kullanılır

Teşekkürler!

cevap

109

Bunları, örneğin, özniteliklerde sütun sırasını belirtebilirsiniz: Bir DbSet ait Find yöntemini kullanıyorsanız

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 
} 

dikkate anahtar parametreler için bu emri almalıdır.

38

Slauma tarafından sunulan doğru cevabı tamamlamak için, hem kompozit birincil anahtarlar için sipariş belirtmek için Haskey yöntemi kullanabilirsiniz:

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

Teşekkür - iki yöntem de gayet çalışır. Öznitelikleri tercih ederim çünkü sınıflarımdan kod oluşturuyorum ve öznitelikleri çok daha özlü. – GilShalit

+0

Şahsen, anahtarlı özelliklerin her birine Propety (x ...), HasColumnOrder (0 ... n) eklerim. Bu iyi, kötü, kayıtsız mı? – Suamere

5

, Eğer benim gibi, bir yapılandırmayı kullanmayı tercih Eğer (Manavinin örneğin göre) bu şekilde bunu yapabilir file:

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

Açıkçası size bağlamına yapılandırma dosyasını eklemek zorunda:

Bir anonim nesne olarak
public class Ctp5Context : DbContext 
{ 
    public DbSet<User> Users { get; set; }   

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

Kullanım:

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