web-dev-qa-db-fra.com

Comment configurer une colonne d'identité à l'aide d'Entity Framework Core?

Comment créer une colonne d'identité à incrémentation automatique dans Entity Framework Core?

Évidemment, je peux le faire en utilisant couramment l'API pour EF6 par exemple.

21
Andrew Duffy

Puisqu'il y a très peu de documentation EF7, une grande partie de ce que nous savons que nous devons glaner à partir de la source ou des tests unitaires. Selon les deux tests unitaires suivants dans la source EF7 ...

Ici et Ici

Vous devez configurer une propriété pour l'identité comme ceci:

b.Property(e => e.Id).ForSqlServer().UseIdentity();

Et vous devez configurer une propriété pour les séquences comme celle-ci:

ForSqlServer().UseSequence();

Les URL ont changé en raison de la réorganisation aspnet-core, et les méthodes ont également changé depuis que cela a été demandé pour la première fois.

Ici et Ici

if (_useSequence) 
{
    b.Property(e => e.Identifier).ForSqlServerUseSequenceHiLo();
} 
else 
{
    b.Property(e => e.Identifier).UseSqlServerIdentityColumn();
}

Il est possible que ces URL changent à nouveau (c'est pourquoi j'inclus le code correspondant), mais il est ridiculement facile de simplement regarder l'URL et d'aller sur le site et de comprendre ce qu'est la nouvelle URL.

Vraiment, le point entier de ma réponse est que vous pouvez comprendre vous-même ces choses simplement en allant et en regardant les tests unitaires dans le code source sur GitHub. Vous ne devriez pas avoir besoin de quelqu'un pour vous le nourrir à la cuillère.

EDIT: liens mis à jour vers la version 2.1 (fonctionne toujours pour 1.1 et 2.0 également)

19
Erik Funkenbusch

Dans la dernière version d'EF7, il existe une nouvelle méthode d'extension pour définir la colonne d'identité

protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
  modelBuilder.Entity<MyEntity>(b =>
  {
    b.HasKey(e => e.Identifier);
    b.Property(e => e.Identifier).ValueGeneratedOnAdd();
  });
}
34
vityanya

Avec les derniers bits EF Core 1.0 et plus, vous devez utiliser

builder.Entity<ApplicationUser>().Property<int>(nameof(ApplicationUser.AccountNo))
            .UseSqlServerIdentityColumn()
9
codevision

Voici comment le faire explicitement dans le cas où vous souhaitez OR ce n'est pas le comportement par défaut.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
  modelBuilder.Entity<MyEntity>(b =>
  {
    b.Key(e => e.Identifier);
    b.Property(e => e.Identifier).ForSqlServer().UseIdentity();
  }
}
3
Andrew Duffy