2010-06-09 7 views
0

J'ai une chose vraiment difficile d'aller ici. Mon projet compte environ 100 tables et elles sont toutes mappées par LINQ. Tout fonctionne bien dans un environnement de développement et de test. Ces environnements sont des serveurs MS Win 2008 r2 avec des bases de données SQL 2008 sp1. IIS et SQL sont sur des machines différentes. Maintenant sur l'environnement de production qui est la ferme Web MS Win 2003 x64 + géolocalisé SQL 2008 cela ne fonctionne pas. Tout ce que je reçois est l'exceptionLINQ to SQL Problème System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager

System.IndexOutOfRangeException: Index was outside the bounds of the array. at 
System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager3.TryCreateKeyFr>om Values(Object[] values, MultiKey& k) at 
System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache2.Find(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 
ERS.IIMP.Services.ExposuresSrv.Update(Int32 ExpID, Int32 AssID)  
Services\ExposuresSrv.cs` 

Ma question est ce que l'enfer. Ils ont exactement le même DBML, la DB a exactement la même structure (quand j'obtiens la DB de prod à TEST et la monte tout fonctionne bien), les binaires sur le serveur WEB sont les mêmes. Je ne sais pas vraiment quoi faire .... Quelqu'un at-il trouvé que Linq travaille sur un env et ne le fait pas sur la seconde ?? Je suis vraiment perdu ici. J'espère vraiment que vous pouvez m'aider :)

+0

Est-ce que j'ai une association dans DBML qui ne sont pas des clés étrangères dans une base de données (pour des raisons de performances) mais sont en fait des clés étrangères d'une manière conceptuelle? – luckyluke

+0

Vous pourriez avoir raison de soupçonner le FKey, selon le commentaire sur cette réponse http://stackoverflow.com/questions/86685/debugging-linq-to-sql-submitchanges/104316#104316 –

Répondre

1

Est-il possible que votre ferme Web Windows 2003 utilise .NET 3.5 sans SP1 et vos machines dev ont SP1?

Il y avait un certain nombre de bugs autour de la cartographie des clés étrangères aux champs à l'autre extrémité qui ne sont pas les clés primaires - certains ont été résolus dans .NET 3.5 SP1 et quelques .NET 4.0.

Ce serait exactement dans cette voie de code et le résultat est souvent un indice hors de portée (ou une distribution non valide).