Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich das Entity Framework zwingen, Identitätsspalten einzufügen?

EF 6 Methode unter Verwendung des msdn-Artikels:

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();
}

Aktualisierung: Um den Fehler „Expliziter Wert muss für Identitätsspalte in Tabelle ‚TableName‘ angegeben werden, entweder wenn IDENTITY_INSERT auf ON gesetzt ist oder wenn ein Replikationsbenutzer etwas in eine NOT FOR REPLICATION-Identitätsspalte einfügt“ zu vermeiden, sollten Sie den Wert von StoreGeneratedPattern<ändern /stark> Eigenschaft der Identitätsspalte von Identity auf None im Modelldesigner.

Beachten Sie, dass das Ändern von StoreGeneratedPattern auf None das Einfügen eines Objekts ohne angegebene ID (normaler Weg) mit dem Fehler "Kann keinen expliziten Wert für Identitätsspalte in Tabelle 'TableName' einfügen, wenn IDENTITY_INSERT auf OFF gesetzt ist" fehlschlägt.