2009-07-22 13 views
5

Tengo un problema simple que lee un archivo Excel (usando interoperabilidad) y rellena un archivo de base de datos MSSQL con algunos datos extraídos de él. Eso está bien hasta ahora. Tengo una tabla Tiendas con los siguientes campos:LINQ to SQL - La base de datos generó una clave que ya está en uso

  • ID: int, generada automáticamente, la sincronización automática: el inserto
  • Nombre: cadena
  • Solución: cadena
  • Provincia: cadena
  • Dirección: cadena

leí el archivo de Excel, y luego crear un nuevo objeto Tiendas y establecer el nombre, Asentamiento, Condado y Dirección propert y llamo Shops.InsertOnSubmit() con el nuevo objeto Shops.

Después de esto tengo que restablecer la base de datos (al menos, la tabla), para lo cual la forma más fácil que encontré fue llamar al método DeleteDatabase() y luego llamar a CreateDatabase() nuevamente. El problema es que después del primer restablecimiento, cuando trato de llenar la tabla de nuevo, obtengo la excepción: la base de datos generó una clave que ya está en uso.

Además, desde ese momento, no puedo usar ese archivo de base de datos, porque DatabaseExists() devuelve FALSE, pero cuando invoco el método CreateDatabase(), arroja una excepción, que la base de datos ya existe (aunque los archivos de datos no existen).

¿Qué estoy haciendo mal? ¡Muchas gracias de antemano!

Respuesta

4

Parece que estás reutilizando el contexto de datos más allá de lo que es prudente. Intente desechar y volver a crear el contexto de datos después de eliminar la base de datos.

Sospecho que el problema es que el administrador de identidades sigue rastreando objetos (destruir y recrear la base de datos es un caso tan extremo que creo que podemos perdonarlo por no reiniciarse aquí).

+0

Muchas gracias, deseché el contexto de datos después de eliminar la base de datos y luego lo reinstalé y recreé para que esté funcionando ahora. ¡Muchas gracias! Una cosa más: ¿cómo puedo 'liberar' las bases de datos que creé hasta ahora? MSSQL no me permitirá crear bases de datos con ese nombre ... – ShdNx

+0

No lo sé, me temo. –

+1

Gracias. Tuve un problema similar porque dejé ASP.Net Development Server ejecutándose mientras volvía a implementar la base de datos. Debo recordar apagar el servidor de desarrollo antes de volver a implementarlo. –

2

Encontré este error. Tenía una tabla de registro, con una identidad. Estaba truncando el registro, mientras mi aplicación se estaba ejecutando. Lo que sucedió fue que la base de datos volvía a iniciar la columna de identidad cuando trunqué, sin embargo, el contexto de datos que estaba usando para registrar todavía tenía objetos que estaba siguiendo con la misma clave.

0

Encontré este error porque estaba usando un procedimiento almacenado personalizado para la inserción con una tabla que tenía una columna de identidad, pero había olvidado "SET @Id = SCOPE_IDENTITY" al final de mi sproc.

No estaba usando realmente el valor de identidad resultante por lo que el problema solo apareció cuando inserté dos o más filas. Tricky error.

+0

Parece que encuentro el mismo error, ¿configura @Id como parámetro de salida de la sp? – liang

+0

Probablemente estaba usando @Id como parámetro de salida. Lo siento, no puedo recordarlo con certeza, eso fue hace mucho tiempo y mi memoria no es tan fuerte :). –

Cuestiones relacionadas