¿Hay alguna manera de forzar el valor de ID para una nueva entidad en EF cuando tenemos una columna de autoaumento de ID, es decir, usar el comportamiento SET IDENTITY_INSERT a través de EF?Entity Framework SET IDENTITY_INSERT
Nuestro requisito es que nuestro formulario de creación siempre debe mostrar una ID nueva y única para el objeto que estamos creando en el formulario vacío antes de que se complete o se guarde. La idea es que este ID pueda leerse por teléfono y luego el usuario puede completar y guardar el formulario después de que se complete la llamada. Podríamos reservar una identificación insertando una fila vacía en la base de datos en ese momento, pero tenemos columnas únicas y FK; en su lugar, he creado una tabla de "próxima ID" que incrementamos con bloqueos por seguridad, y también la pruebo con la ID superior en la tabla de objetos para tener cuidado. La idea era forzar el uso de esta nueva identificación cuando redactamos la entidad, pero no veo cómo lograr que EF lo haga.
¿Es eso posible? ¿Es solo algo que me he perdido? No creo que la ID llegue incluso a la inserción, así que no creo que llamar manualmente a SET IDENTITY_INSERT alrededor de SaveChanges ayude.
¿O tengo que hacer otra cosa? Puedo ver alternativas:
- Cambie nuestra columna de ID para que no sea una identidad y tome el control manual de todo: aquí hay una herencia de ID de tabla, así que esto es potencialmente complicado también.
- Separar ID de DB e ID visible por el usuario en una columna separada, y registrar allí nuestra ID única.
- Vaciar la fila para reservar la ID, como se indica arriba; podría necesitar algunos cambios de nulabilidad y modificar nuestro código de lectura de datos para ignorar estos registros.
Gracias! Esto es EF4 (utilizando un EDMX y clases generadas, no POCO), y en contra de SQL Server 2008 en caso de que importe.
La única manera de garantizar la identificación es insertarla: jugar con 'SET IDENTITY INSERT' no solucionará el hecho de que tratará con posibles duplicados antes de alternar la funcionalidad para hacer frente a las limitaciones.¿Es esto realmente solo un problema con la necesidad de números secuenciales? –
@OMG Ponies Sí, tal vez ese sea el camino a seguir después de todo. Sin embargo, las identificaciones duplicadas para insertar definitivamente serán el caso de excepción: los nuevos identificadores secuenciales que estamos alimentando se generaron en una tabla diferente con bloqueos, etc. por lo que, a menos que las cosas vayan inesperadamente mal, serán únicos. – Rup
Si determina usted mismo los nuevos valores, ¿para qué necesita la especificación 'IDENTITY', en ese caso ??? –