web-dev-qa-db-fra.com

Code Entity Framework utilisant d'abord une colonne comme clé primaire et une autre comme colonne d'incrémentation automatique

J'ai une classe nommée Sale

public class Sale
{
    public int Id { get; set; }
    public string TrNo { get; set; }
    public DateTime Date { get; set; }
    public int CustomerID { get; set; }

    public ObservableCollection<SaleDetail> SaleDetails { get; set; }
}

Et dans la base de données, je veux le Id comme Auto Increment colonne et TrNo comme Primary Key colonne.

Veuillez me dire comment procéder en utilisant le code EF5 en premier.

Merci.

28

Apparemment, le réponse de @ IronMan84 correct. Mais ça n'a pas marché pour moi. Je l'ai légèrement modifié pour appliquer ma autre condition. Et ça a marché. Je n'ai rien fait d'autre.

C'est ma solution.

public class Sale
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Key, Column(TypeName = "varchar"), MaxLength(50)]
    public string TrNo { get; set; }

    public DateTime Date { get; set; }
    public int CustomerID { get; set; }

    public ObservableCollection<SaleDetail> SaleDetails { get; set; }
}

Malheureusement, je ne peux pas faire la réponse de @ IronMan84 comme la bonne car cela n'a pas fonctionné pour moi.

5

Vous pouvez également le faire avec les annotations de données:

public class Sale
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Key]
    public string TrNo { get; set; }

    public DateTime Date { get; set; }
    public int CustomerID { get; set; }

    public ObservableCollection<SaleDetail> SaleDetails { get; set; }
}
45
IronMan84

Je pense que vous pouvez le faire en utilisant l'API Fluent

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Sale>().Property(a => a.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    modelBuilder.Entity<Sale>().Property(a => a.TrNo).HasKey(b => b.TrNo);
}
17
Jake

Cela m'a aidé. J'espère que cela aide quelqu'un d'autre qui regarde toujours autour

public class Sale
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]//switch on autogenerated
        public int Id { get; set; }

        [Key]//set as Primary key
        [DatabaseGenerated(DatabaseGeneratedOption.None)]// switch off autogenerated PK
        public string TrNo { get; set; }

        public DateTime Date { get; set; }
        public int CustomerID { get; set; }

        public ObservableCollection<SaleDetail> SaleDetails { get; set; }
}
2
Jephren Naicker