2009-08-04 9 views
1

Dans mon DAL LINQ-to-SQL, j'obtiens un "Cast spécifié non valide".Comment puis-je voir les types par lesquels une exception InvalidCastException est levée en C#?

Voici l'erreur exacte:

System.InvalidCastException was unhandled by user code Message="Specified cast is not valid." Source="System.Data.Linq" StackTrace: 
    at System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManager`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 DomainModel.Repository.Concrete.SqlClientRepository.InsertClientByUsername(String username, Client clientInfo) in C:\Documents and Settings\Owner\Desktop\CollectionTree v1.1\DomainModel\Repository\Concrete\SqlClientRepository.cs:line 99 
    at WebUI.Secure.Controllers.ClientAdminController.EditProfile(Client clientProfile) in C:\Documents and Settings\Owner\Desktop\CollectionTree v1.1\WebUI.Secure\Controllers\ClientAdminController.cs:line 69 
    at lambda_method(ExecutionScope , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) InnerException: 

Il se passe sur mes db.SubmitChanges(). De toute façon, où dans cette exception est quels types il a du mal à lancer? Cela aiderait à le circonscrire si je savais à quels types particuliers il avait des problèmes. Je peux survoler l'exception dans Visual Studio, mais je ne sais pas quelles propriétés regarder.

Répondre

1

Je reçois occasionnellement un InvalidCastException via COM interop et ... Je suis SOL? Il semble qu'un InvalidCastException en pure IL obtienne l'information de type, mais quand il est manipulé dans une conversion d'encapsuleur interopérable, il ignore cette partie. Je devine dans les wrappers COM le problème est dû au fait que le HRESULT pour E_NOINTERFACE ne contient pas d'informations sur les types impliqués, et l'emballage n'a aucun moyen de revenir en arrière et de regarder l'élément précédent que QueryInterface cherchait . Même si c'était le cas, il faudrait aller chercher le Guid et espérer qu'un wrapper d'interopérabilité pour le type serait là pour obtenir des informations significatives.

Si LINQ-to-SQL utilise COM interop dans les coulisses, voici votre réponse. :)

Questions connexes