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.
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 ...
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.
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)
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();
});
}
Avec les derniers bits EF Core 1.0 et plus, vous devez utiliser
builder.Entity<ApplicationUser>().Property<int>(nameof(ApplicationUser.AccountNo))
.UseSqlServerIdentityColumn()
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();
}
}