Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je forcer entity framework à insérer des colonnes d'identité ?

EF 6 méthode, en utilisant l'article msdn :

using (var dataContext = new DataModelContainer())
using (var transaction = dataContext.Database.BeginTransaction())
{
    var user = new User()
    {
        ID = id,
        Name = "John"
    };

    dataContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] ON");

    dataContext.User.Add(user);
    dataContext.SaveChanges();

    dataContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] OFF");

    transaction.Commit();
}

Mise à jour : Pour éviter l'erreur "Une valeur explicite doit être spécifiée pour la colonne d'identité dans la table 'TableName' soit lorsque IDENTITY_INSERT est défini sur ON, soit lorsqu'un utilisateur de réplication insère dans une colonne d'identité NOT FOR REPLICATION", vous devez modifier la valeur de StoreGeneratedPattern propriété de la colonne d'identité de Identity à Aucun dans le concepteur de modèles.

Remarque, le changement de StoreGeneratedPattern en Aucun échouera à l'insertion de l'objet sans identifiant spécifié (méthode normale) avec l'erreur "Impossible d'insérer une valeur explicite pour la colonne d'identité dans la table 'TableName' lorsque IDENTITY_INSERT est défini sur OFF".