it-swarm.com.de

in Entity Framework Code zunächst, wie KeyAttribute für mehrere Spalten verwendet wird

Ich erstelle ein POCO-Modell für die Verwendung mit Entity Framework Code CTP5. Ich verwende die Dekoration, um eine Eigenschaftskarte zu einer PK-Spalte zu machen. Aber wie kann ich eine PK in mehr als einer Spalte definieren und wie kann ich die Reihenfolge der Spalten im Index steuern? Liegt es an der Reihenfolge der Eigenschaften in der Klasse?

Vielen Dank!

81
GilShalit

Sie können die Spaltenreihenfolge in den Attributen angeben, zum Beispiel:

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
}

Wenn Sie die Find-Methode einer DbSet verwenden, müssen Sie diese Reihenfolge für die Schlüsselparameter berücksichtigen.

132
Slauma

Um die richtige Antwort von Slauma zu vervollständigen, können Sie mit der Methode HasKey auch eine Reihenfolge für zusammengesetzte Primärschlüssel angeben:

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 
        });
    }
}
49
Morteza Manavi

Wenn Sie wie ich es vorziehen, eine Konfigurationsdatei zu verwenden, können Sie dies auf folgende Weise tun (am Beispiel von 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});
    }
}

Natürlich müssen Sie die Konfigurationsdatei Ihrem Kontext hinzufügen:

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

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

Als anonymes Objekt verwenden:

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