2011-01-26 74 views
5

Detalles de la aplicación: C#, ASP.NET MVC, SQL Server 2008 (misma versión & nivel SP), LINQ a SQL ORM"La conversión especificada no es válida" error al guardar LINQ a SQL entidad

estoy tratando de diagnosticar una excepción que estoy recibiendo:

"Specified cast is not valid." at System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManage`2.TryCreateKeyFromValues(Object[] values, V& v)
at System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(Object[] keyValues)
at System.Data.Linq.IdentityManager.StandardIdentityManager.Find(MetaType type, Object[] keyValues)
at System.Data.Linq.CommonDataServices.GetCachedObject(MetaType type, Object[] keyValues)
at System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc, Object instance)
at System.Data.Linq.ChangeProcessor.BuildEdgeMaps()
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
at Repository.Save() at etc....

El problema es que esto ocurre sólo en nuestros servidores, no en nuestras cajas de desarrollo local. He rastreado hacia abajo a una sola propiedad que estamos modificando:

event.SalesForceId = "701Q0000000AOTIIA4"; 

Si comento hacia fuera de esa línea, todo funciona bien.

He intentado:

1) depilación todo el código en el servidor y volver a desplegar. Mismo problema.
2) Tirando de una copia del servidor DB y probándolo localmente. Funciona bien.
3) Probando otro entorno IIS, hemos configurado en el mismo cuadro. Mismo problema.
4) Comparando físicamente (usando AdeptSQL) los esquemas locales y remotos. Sin diferencias
5) La verificación de los tipos de datos de ambas columnas (local y remota) es la misma. Además, esta columna es un FK a otra tabla. Verifiqué que ambos son del mismo tipo de datos, hasta la intercalación.

El servidor es Windows Server 2008 y el recuadro local es Windows 7 x64. Ambos tienen configuradas todas las actualizaciones importantes.

Lo único que se me ocurre es quizás porque la base de datos y el servidor web están en cajas diferentes que podrían ser un problema. De lo contrario, estoy completamente perplejo.

¿Alguna idea?

+0

¿Cuál es el tipo de 'V' en esa última llamada? Usa el depurador para ver eso. – leppie

+1

Además, .NET 3.5 o 4.0? – leppie

+0

Esto es .net 3.5, no 4, con todos los paquetes de servicio aplicados. Además, no puedo usar el depurador para recorrerlo porque está en el servidor. La depuración remota tampoco es una opción. – gcaprio

Respuesta

7
+1

eres un hombre magnífico, eso fue todo. Muchas gracias. – gcaprio

+0

Descargué 963657 y traté de instalarlo pero me está dando el siguiente error: Ninguno de los productos que se tratan con esta actualización de software está instalado en esta computadora. Haga clic en Cancelar para salir de la configuración. Esto es porque 963657 es para Framework 3.5 SP1 pero estoy teniendo framework 3.5. –

1

Si existe esa clave en una relación definida y el objeto ya se crea entonces el proporcionado-LINQ trayectoria relación (obj.Foo = new Foo { ... }) debe ser utilizado. (Utilizaría las relaciones proporcionadas incluso para objetos nuevos). No hacerlo resultará, hablando por experiencia, en errores "aleatorios" como ese.

Otro problema que puede causar eso (o un error muy similar) es columnas de relaciones inversas, para las relaciones compuestas. Sin embargo, si el código generado es el mismo y el DB es el mismo (de verdad, en ambas cuentas) entonces sospecho que la primera razón es la culpable.

Happy SQL-to-LINQ saltos de baches.

+0

Interesante, pero generalmente he tenido la 'NullReferenceException'' normal 'en esos casos IIRC. Si podemos descubrir por qué no está lanzando (a 'string' supongo) sería útil. – leppie

+1

@leppie Con mucho gusto renunciaría a mi calcetín favorito si pudiera encontrar un "libro de cocina" para manejar los errores de LINQ: -/ –

+0

+1 Quiero uno también. Por lo general, si puedo conectarme al proceso y utilizar un depurador, no es demasiado difícil averiguar qué está sucediendo internamente (con un poco de ayuda de Reflector, por supuesto), y luego rastrear el problema (mirando el estado/lugareños en la pila administrada). – leppie

Cuestiones relacionadas