sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo puedo obligar al marco de la entidad a insertar columnas de identidad?

EF 6 método, usando el artículo de 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();
}

Actualización: Para evitar el error "Se debe especificar un valor explícito para la columna de identidad en la tabla 'TableName' cuando IDENTITY_INSERT está activado o cuando un usuario de replicación está insertando en una columna de identidad NOT FOR REPLICATION", debe cambiar el valor de StoreGeneratedPattern propiedad de la columna de identidad de Identidad a Ninguno en diseñador de modelos.

Tenga en cuenta que el cambio de StoreGeneratedPattern a Ninguno fallará al insertar un objeto sin una identificación especificada (forma normal) con el error "No se puede insertar un valor explícito para la columna de identidad en la tabla 'TableName' cuando IDENTITY_INSERT está desactivado".