web-dev-qa-db-fra.com

Champ d'incrémentation automatique Entity Framework, qui n'est pas l'ID

Je sais que ce n'est pas la solution la plus idéale, mais je dois ajouter un champ d'incrémentation automatique à l'un de mes objets EF Code First. Cette colonne n'ID PAS l'ID, qui est un guide.

Existe-t-il de toute façon pour moi de définir le champ d'incrémentation automatique dans le code, ou créer la colonne moi-même et définir dans la base de données que son incrémentation automatique fonctionne?

36
JamesStuddart

Vous pouvez annoter cette propriété avec DatabaseGenerated(DatabaseGeneratedOption.Identity). EF n'autorise qu'une seule colonne d'identité par table.

public class Foo
{
    [Key]
    public Guid Id { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Bar { get; set; }
}
59
Eranga

Un ancien post pensait que je partagerais ce que j'ai trouvé avec Entity Framework 6.1.3.

J'ai créé une bibliothèque de couches de données simple à l'aide de C # et .NET Framework 4.6.1, ajouté une classe de référentiel/service simple, une première classe de contexte de code et pointé mon fichier web.config vers une base de données SQL Express 2014 locale.

Dans la classe d'entité, j'ai ajouté le constructeur d'attribut suivant à la colonne Id:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }

J'ai ensuite créé une nouvelle migration en tapant ce qui suit dans Visual Studio 2015 Package Manager:

Ajout de migration

Donnez un nom à la migration, puis attendez que la classe DbMigtation soit créée. Modifiez la classe et ajoutez l'opération CreateTable suivante:

CreateTable(
"dbo.Article",
    c => new
    {
        Id = c.Guid(nullable: false, identity: true),
        Title = c.String(),
        Content = c.String(),
        PublishedDate = c.DateTime(nullable: false),
        Author = c.String(),
        CreateDate = c.DateTime(nullable: false),
    })
    .PrimaryKey(t => t.Id);
}

Le tableau ci-dessus est un exemple, le point clé ici est l'annotation de générateur suivante:

nullable: false, identity: true

Cela indique à EF de spécifier la colonne comme non nulle et vous souhaitez la définir comme colonne d'identité à amorcer par EF.

Exécutez à nouveau la migration avec la commande suivante:

update-database

Cela exécutera la classe de migration en supprimant d'abord la table (méthode Down ()) puis en créant la table (méthode Up ()).

Exécutez vos tests unitaires et/ou connectez-vous à la base de données et exécutez une requête de sélection.Vous devriez voir votre table sous sa nouvelle forme, ajouter des données à l'exclusion de la colonne Id et vous devriez voir les nouveaux Guid (ou le type de données que vous choisissez) à générer .

7
Tahir Khalid