5

Estoy ejecutando una solución NHIbernate utilizando SQL CE. Estoy mapeando uno de los campos en una tabla como a continuación. Sin embargo, para ejecutar algunas importaciones de datos, necesito poder desactivar temporalmente la identidad para poder importar los datos con sus claves existentes, y luego volver a activar la identidad una vez que la importación haya finalizado.NHibernate -Temporariamente desactivar identidad

He intentado ejecutar una consulta SQL directamente de la solución como esta:

session.CreateSQLQuery(@"SET IDENTITY_INSERT [Article] ON"); 

pero esto parece tener ningún efecto.

¿Hay alguna forma de activarlo y desactivarlo temporalmente?

Property(x => x.ArticleId, m => 
{ 
    m.NotNullable(true); 
    m.UniqueKey("UQ_Article_ArticleId"); 
    m.Column(cm => cm.SqlType("INT IDENTITY")); 
    m.Generated(PropertyGeneration.Insert); 
    m.Insert(true); 
    m.Update(false); 
}); 

Respuesta

0

Al final fue algo bastante simple.

La línea de SQL debería haber sido la siguiente:

session.CreateSQLQuery(@"SET IDENTITY_INSERT [Article] ON").ExecuteUpdate(); 

y necesario para estar dentro de una transacción. Sin embargo, solo puede hacer esto en una tabla por transacción, así que realmente no me ayudó mucho.

+0

¿Alguien realmente lo ha hecho funcionar? – Dan

0

SQL debe ser un camino a seguir, pero creo que haya invertido el sentido de IDENTITY_INSERT.

Para permitir insertar en la columna de identidad, debe convertirlo a ON.

session.CreateSQLQuery(@"SET IDENTITY_INSERT [Article] ON"); 

Y después de haber hecho su mayor inserta, vuelva a OFF.

session.CreateSQLQuery(@"SET IDENTITY_INSERT [Article] OFF"); 

Más detalles sobre MSDN.

+0

Sí, lo he intentado pero no funciona. Mi ejemplo anterior solo mostraba cómo estoy ejecutando el SQL. En la práctica, he estado haciendo como lo mencionaste. "Encendido" primero y luego "Apagado" después. – user874615

Cuestiones relacionadas