Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come posso forzare il framework di entità a inserire colonne di identità?

EF 6 metodo, utilizzando l'articolo 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();
}

Aggiornamento: Per evitare l'errore "È necessario specificare un valore esplicito per la colonna di identità nella tabella 'TableName' quando IDENTITY_INSERT è impostato su ON o quando un utente di replica sta inserendo in una colonna di identità NOT FOR REPLICATION", è necessario modificare il valore di StoreGeneratedPattern proprietà della colonna Identity da Identity a Nessuno nel modellista.

Nota, la modifica di StoreGeneratedPattern in None non riuscirà a inserire l'oggetto senza ID specificato (modo normale) con l'errore "Impossibile inserire un valore esplicito per la colonna Identity nella tabella 'TableName' quando IDENTITY_INSERT è impostato su OFF".